void main(void){
for(int i;;);
for(int i;;);
}
Действительно ли это код C? Какова область действия i?Какова область переменных, объявленных в состоянии «для»?
void main(void){
for(int i;;);
for(int i;;);
}
Действительно ли это код C? Какова область действия i?Какова область переменных, объявленных в состоянии «для»?
С99 6.8.5.3 для постановки
Изложение
for (clause-1 ;expression-2 ;expression-3)statement
ведет себя следующим образом: Выражение выражение-2 является контролирующим выражение, которое вычисляется перед каждое выполнение тела цикла. Выражение-выражение оценивается как выражение void после каждого выполнения тела цикла. Если предложение-1 представляет собой объявление , область видимости любых переменных, которые она объявляет, является остатком декларации и весь цикл, включая два других выражения; достигается в порядке выполнения до первой оценки управляющего выражения. Если предложение-1 является выражением, оно оценивается как выражение void перед первой оценкой контролирующего выражения.
Также обратите внимание, что эта функция действительна только с C99. Другими словами, вы не можете объявить переменную в первом выражении в цикле for
на C89.
* Некоторый * компилятор может считать это недопустимым кодом, так как существует 2 бесконечных цикла, что делает второй недоступным. –
«Действительно ли это C-код?» - 'void main (void)' поддержка зависит от реализации. – milleniumbug