|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Alexandr S. Agranovsky 2:5020/400 01 Jan 2003 03:39:53 To : Valentin Nechayev Subject : Re: Re: kernel compiling -------------------------------------------------------------------------------- Hi, Valentin Nechayev VN>> AC>>> for (int i=0; i < 5; ++i){ VN>> AC>>> for (int i=0; i < 15; ++i){ ASA>> ... VK>>>> происходит выход из внешнего цикла. Или здесь опечатка и во внутреннем VK>>>> цикле используется переменная j? ASA>> Соль в том, что после первого for имеем составной оператор {}, VN> Возражение шло на пример, где оптимизация убила внутренний цикл в 0. мы говорим об оптимизации (было) или (уже) об различии переменных внутри составных операторов? ASA>> внутри которого можно заново определить переменную с тем же ASA>> именем - но фактически это будет уже _другая_ переменная. ASA>> Все согласно правилам Си и C++ (я скомипилил и проверил, как .c ASA>> так и .cpp, с ключом -O0). VN> Да??? Для Си это прокатывать никак не должно, что у меня и происходит: VN> 20:21:21:netch@iv:~/tmp>gcc -c t.c VN> t.c: In function `main': VN> t.c:4: syntax error before `int' VN> t.c:4: `i' undeclared (first use in this function) VN> t.c:4: (Each undeclared identifier is reported only once VN> t.c:4: for each function it appears in.) VN> t.c:4: syntax error before `)' VN> t.c:5: syntax error before `)' VN> 20:21:27:netch@iv:~/tmp>gcc -v VN> Using builtin specs. VN> gcc version 2.95.4 20020320 [FreeBSD] Я признаюсь в том, что малость подкорректировал программку (не изменив сути определений по области видимости: int sum; int i; for (i=0;i<5;i) { int i; for (i=0;i<15;++i) {++sum;} } VN> А вот для C++ действительно может работать: VN> 20:18:04:netch@iv:~/tmp>gcc -c -xc++ t.c VN> 20:18:29:netch@iv:~/tmp>echo $? VN> 0 VN> Так что я тебе рекомендую 1) тщательно проверить, что ты действительно VN> компилировал это как программу на C, а не на C++, Да, я компилировал именно как Си - в первый раз меня точно так же обругали, тогда я вынес int i за пределы цикла и получил тот же самый результат (75) VN> 2) в этом случае назвать VN> компилятор, чтобы я никогда им не пользовался ;)) ;) Я ошибку допустил - сразу не привел текст, который скормил gcc'у - а он _действительно_ отличался (буквами, но не смыслом) ASA>> Оптимизатор тут ни при чем. VN> Ты точно потерял контекст. Вот максимум что я смог добиться от 2.95.4: VN> main: VN> pushl %ebp VN> movl %esp,%ebp VN> xorl %eax,%eax VN> xorl %edx,%edx VN> .p2align 2,0x90 VN> .L6: VN> incl %edx VN> movl $14,%ecx VN> .p2align 2,0x90 VN> .L10: VN> incl %eax VN> decl %ecx VN> jns .L10 VN> cmpl $4,%edx VN> jle .L6 VN> movl %ebp,%esp VN> popl %ebp VN> ret Да, я тоже получил подобный код от 2.95.2 из Debian 2.2 VN> А ICC оказался умнее, он сразу дал готовый результат. С оптимизацией-то понятно, я хотел VK'у объяснить, что переменные "i" в обоих циклах разные. - --- Alexandr S. Agranovsky llb@udmnet.ru --- ifmail v.2.15dev5 * Origin: LLB, LLC (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/364246655173.html, оценка из 5, голосов 10
|