Joker_vDИ пускай там уже компилятор играет с регистрами и инлайнит функции, все равно у него это выходит куда как лучше.
Я вот тут почитал для примера ассемблерный листинг такой программы. Программа из моего первого сообщения, один из вариантов (A,B,C,X,Y).
#include <stdio.h>
main()
{
int FC, SP, TB; FC=SP=TB=0;
int c=getchar();
if(c==' ' || c=='\t')
{
FC=123;
if(c==' ') SP=234; else TB=345;
}
printf("%d %d %d", !!FC, !!SP, !!TB);
}
(FC = format character, эти странные числа 123, 234 и 345 - это чтобы удобнее было листинг читать
)
Так вот, компилятор хоть и сделал всё довольно лаконично (я не сразу разобрался в этих всех джампах), но всё-таки двойной полностью идентичный вызов movl $123, %eax присутствует. Хотя, возможно, конкретно в этом случае повторить команду в двух разных местах экономнее, чем делать из двух мест джамп в одно место с этим присваиванием.
И я всё равно считаю, что команды можно написать проще и быстрее.
-- Вт фев 11, 2014 01:59:48 --inline есть в C99
Спасибо, буду теперь использовать:)