- 1
- 2
- 3
- 4
- 5
- 6
__declspec(noreturn) int FastAdd(const int a, const int b)
{
__asm mov eax, a;
__asm mov ebx, b;
__asm add eax, ebx;
};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+922.2
__declspec(noreturn) int FastAdd(const int a, const int b)
{
__asm mov eax, a;
__asm mov ebx, b;
__asm add eax, ebx;
};
Встречаеться множество подобных функций в одном С++ проекте, который в данный момент разгребаю. Хочеться что-нибудь сказать автору. Например: "на XYZ"?
TarasB 08.01.2010 23:24 # −1
asm
mov ax, a
mov bx, b
mov a, bx
mov b, ax
end;
Из памяти в память писать запрещено.
4 команды. А обычный обмен или через ксор делает 6 операций.
Говногость 08.01.2010 23:56 # +4
TarasB 09.01.2010 00:22 # 0
Говногость 09.01.2010 00:55 # +9.2
Altravert 09.01.2010 08:49 # 0
guest 12.01.2010 19:54 # +3
guest 13.01.2010 10:58 # 0
guest 09.01.2010 00:57 # 0
guest 09.01.2010 01:17 # +0.2
/* в случае a == b (указывают на один int) функция не работает */
assert(a != b);
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
guest 09.01.2010 01:26 # 0
guest 09.01.2010 01:29 # 0
Nex 09.01.2010 13:39 # 0
guest 09.01.2010 15:34 # 0
a=5;
b=5;
То swap(a,b) приведёт к тому, что в a и b будут лежать нули?
Уж лучше тогда + и - использовать, чем такой не безопасный обмен...
Nex 09.01.2010 15:53 # 0
TarasB 09.01.2010 16:34 # 0
i=5
j=5
то swap(a[i], a[j]) приведёт к двум нулям, даже если a[i] было вовсе не ноль.
Nex 09.01.2010 16:42 # 0
guest 13.01.2010 18:16 # 0
a = a + b; // a = a + a;
b = a - b; // a = a - a;
a = a - b; // a = a - a;
guest 12.01.2010 23:16 # 0
void swap(int * a, int * b){
/* в случае a == b (указывают на один int) функция работает */
if(a == b)
return;
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
guest 13.01.2010 16:33 # −1
guest 13.01.2010 18:01 # 0
if(a == b)
return;
guest 13.01.2010 23:58 # −2
xchg ax, b
mov a, ax
Ну, померялись, дальше что? :)
guest 14.01.2010 10:57 # −1
pushkoff 15.01.2010 01:00 # +1
размер кода не имеет значения еще со времен PPro...
guest 16.01.2010 02:52 # 0
guest 09.01.2010 00:19 # +2
guest 09.01.2010 01:27 # 0
Sauron 09.01.2010 01:46 # +1
guest 14.01.2010 14:40 # 0
guest 09.01.2010 01:50 # +1
Altravert 09.01.2010 09:07 # +1
guest 09.01.2010 10:52 # −1
Altravert 09.01.2010 15:22 # 0
guest 09.01.2010 15:43 # −1
mov %0, %ebx
zitzy 09.01.2010 17:07 # +1
guest 09.01.2010 17:36 # 0
guest 09.01.2010 17:55 # −1
zitzy 10.01.2010 09:52 # +1
guest 10.01.2010 11:41 # −1
guest 10.01.2010 18:44 # −1
Ничего в этом синтаксисе нет кросплатформенного.
guest 12.01.2010 13:53 # 0
guest 13.01.2010 10:59 # +1
guest 14.01.2010 07:54 # +1
guest 09.01.2010 01:30 # 0
Altravert 09.01.2010 08:51 # 0
Altravert 09.01.2010 09:10 # 0
guest 09.01.2010 10:54 # +2
pushkoff 09.01.2010 14:46 # 0
подобным флагом обладает функция longjmp, exit, так как эти функции не возвращают управления... оптимизатор может выкинуть код идущий за этими функциями или кинуть варнинг...
гость выше написал почему это используется здесь...
Altravert 09.01.2010 15:20 # 0
guest 09.01.2010 15:36 # 0
Altravert 09.01.2010 15:38 # 0
pushkoff 09.01.2010 15:49 # 0
недавно у нас был проект с такими же заморочками, но там ребята еще и были в курсе про __fastcall...
Говногость 09.01.2010 17:39 # 0
Altravert 09.01.2010 18:32 # 0
Говногость 09.01.2010 19:19 # 0
Говногость 10.01.2010 00:04 # 0
pushkoff 10.01.2010 19:09 # 0
This __declspec attribute tells the compiler that a function does not return. As a consequence, the compiler knows that the code following a call to a __declspec(noreturn) function is unreachable.
If the compiler finds a function with a control path that does not return a value, it generates a warning (C4715) or error message (C2202). If the control path cannot be reached due to a function that never returns, you can use __declspec(noreturn) to prevent this warning or error.
guest 12.01.2010 20:01 # +1
guest 10.01.2010 04:40 # 0
guest 10.01.2010 00:09 # −2
Altravert 10.01.2010 06:49 # +3
Nex 10.01.2010 09:19 # +1
Altravert 10.01.2010 10:08 # 0
guest 10.01.2010 11:50 # 0
Altravert 10.01.2010 11:58 # 0
guest 10.01.2010 18:52 # 0
Altravert 10.01.2010 19:54 # 0
guest 10.01.2010 22:58 # 0
И если не знал, то guest - не зарегистрированный пользователь. Под ним может сидеть кто угодно. ;)
Altravert 11.01.2010 13:30 # 0
guest 12.01.2010 13:55 # 0
Altravert 12.01.2010 17:32 # 0
guest 12.01.2010 17:50 # 0
Altravert 12.01.2010 17:51 # 0
guest 12.01.2010 20:23 # 0
Сделайте же с этим что-нибудь... Неужели сложно запретить Анонирование Анонимусов?
Altravert 12.01.2010 21:38 # −1
guest 13.01.2010 11:03 # 0
Altravert 13.01.2010 13:04 # 0
guest 09.04.2010 16:38 # 0
TarasB 10.01.2010 16:16 # +1
guest 10.01.2010 18:49 # 0
И ещё сам СтраусТруп говорит, что добиться полной совместимости С++ с Си не получилось. Можно встретить такие проги Си, что не скомпилятся С++ компилятором или скомпилятся не верно. Хотя сам такой пример привести врятли смогу.
guest 10.01.2010 18:51 # 0
Nex 10.01.2010 21:33 # 0
Нормально компилируется и работает. P.S. на говнокоде не перевыкладывать писалось на коленке.
guest 10.01.2010 23:01 # 0
Nex 11.01.2010 12:56 # +1
guest 11.01.2010 13:48 # 0
guest 11.01.2010 23:53 # 0
guest 12.01.2010 05:03 # 0
guest 12.01.2010 13:56 # 0
Altravert 12.01.2010 17:34 # 0
guest 12.01.2010 17:55 # +3
char arr[] = "qwerty";
arr[2] == 'e';
//массив можно привести к указателю. С указателями можно складывать числа:
*(arr+2)=='e';
//от перемены мест слагаемых сумма не меняется
*(2+arr) == 'e';
//возвращаемся к старому синтаксису
a[arr] == 'e';
guest 12.01.2010 17:56 # 0
2[arr] == 'e';
FIXED
guest 12.01.2010 20:24 # 0
Altravert 12.01.2010 17:56 # 0
Говногость 12.01.2010 14:00 # 0
Теперь коммент +2 виртуально имеет.
Nex 12.01.2010 14:25 # 0
guest 12.01.2010 17:43 # 0
guest 12.01.2010 20:26 # 0
pushkoff 10.01.2010 19:12 # 0
void f( const int n )
{
int mas[n];
.......
}
guest 10.01.2010 22:59 # 0
Altravert 11.01.2010 06:29 # 0
Altravert 11.01.2010 06:29 # 0
guest 11.01.2010 16:26 # 0
Altravert 12.01.2010 17:35 # 0
Altravert 10.01.2010 19:55 # 0
Altravert 10.01.2010 18:49 # 0
guest 11.01.2010 12:51 # 0
Altravert 11.01.2010 13:32 # 0
guest 11.01.2010 13:49 # 0
guest 11.01.2010 13:49 # 0
Altravert 11.01.2010 14:11 # −1
guest 11.01.2010 16:28 # +1
Altravert 12.01.2010 08:22 # 0
Говногость 12.01.2010 14:02 # 0
Altravert 12.01.2010 17:36 # 0
guest 09.02.2010 10:41 # 0
guest 11.01.2010 14:47 # −1.8
pushkoff 11.01.2010 14:58 # 0
Проверьте, пожалуйста, правильность написания моих постов.
С Уважением
Антон, 25 лет
Altravert 11.01.2010 15:00 # 0
Так что сам не умничай.
nil 15.01.2010 13:55 # 0
Altravert 11.01.2010 15:01 # 0
Yozheg 11.01.2010 18:11 # 0
А безграмотность лично меня бесит сильнее, чем любой говнокод.
Простите, не удержался
guest 11.01.2010 23:56 # 0
Yozheg 12.01.2010 00:34 # 0
Altravert 12.01.2010 08:23 # 0
Говногость 12.01.2010 14:02 # 0
guest 12.01.2010 00:00 # 0
guest 12.01.2010 17:59 # 0
guest 12.01.2010 20:28 # 0
низащот
будим испровлаца
guest 11.01.2010 17:19 # 0
я так понимаю, что этот сумматор просто используется для каких-то стандартных алгоритмов... std::for_each или что-либо в этом же духе
экономилось время программиста...
при чём тут говнокод?
Nex 11.01.2010 18:54 # 0
Говногость 12.01.2010 14:04 # 0
Altravert 12.01.2010 17:37 # 0
guest 12.01.2010 18:01 # 0
guest 12.01.2010 20:29 # 0
guest 13.01.2010 15:43 # 0
guest 12.01.2010 20:30 # 0
Altravert 12.01.2010 21:40 # −1
Altravert 13.01.2010 08:42 # −1
guest 13.01.2010 12:41 # 0
Altravert 13.01.2010 13:05 # 0
guest 13.01.2010 15:44 # 0
guest 13.01.2010 15:52 # 0
В раздел ассемблера это унылое не смешное говно. Ему место там.
Altravert 13.01.2010 16:49 # 0
Altravert 13.01.2010 16:56 # 0
guest 13.01.2010 18:05 # 0
Код, на который без улыбки не взглянешь?
Нет тут такого. Не смешно. Плакать хочеться.
guest 13.01.2010 19:44 # 0
guest 13.01.2010 22:08 # 0
Altravert 14.01.2010 06:13 # 0