Объявление в заявлении for в c

Возможный дубликат:
C: начальное объявление цикла for int

Можем ли мы объявить некоторые переменные в операторе for в программировании на C? Если да, то в какой версии стандарта c мы найдем эту функцию?


person prehistoricpenguin    schedule 21.12.2012    source источник
comment
В новой версии это возможно c99.   -  person Grijesh Chauhan    schedule 21.12.2012
comment
@icepack Я искал на этом сайте перед тем, как опубликовать свой вопрос, но не нашел повторяющегося вопроса, почему?   -  person prehistoricpenguin    schedule 21.12.2012
comment
@prehistoricpenguin, вы можете задать этот вопрос на странице meta.stackoverflow.com   -  person SomeWittyUsername    schedule 21.12.2012


Ответы (3)


В C89 / C90 все объявления должны появляться в начале блока:

/* valid in C89/C90 */
printf("Hello\n");
{
    int i;
    for (i = 0; i < 10; i++) {
        int j = i % 3;
        printf("%d\n", j);
    }
}

Начиная с C99, вы можете смешивать объявления и операторы, а также объявлять переменные в первой части for:

/* valid in C99 */
printf("Hello\n");
int whatever;
for (int i = 0; i < 10; i++) {
    int j = i % 3;
    printf("%d\n", j);
}
person melpomene    schedule 21.12.2012

Да, это можно сделать, начиная со стандарта c99. Прямая компиляция кода:

int main()
{
   for(int i = 0; i<10; i++)
     printf("%d\n", i);
   return 0;
}

with (по умолчанию "gnu89") gcc даст вам ответ:

В функции main:
error: начальные объявления цикла for разрешены только в режиме C99
примечание: используйте параметр -std = c99 или -std = gnu99 для компиляции кода

person Mike    schedule 21.12.2012

В чистом C вы не можете объявлять переменные в операторе for. Эта функция доступна только в C ++. В C все переменные должны быть объявлены в начале блока кода.

person DuXeN0N    schedule 21.12.2012
comment
@prehistoricpenguin, что будет зависеть от его определения того, что такое чистый C. Спецификация C99 вышла не так давно, если сравнивать с тем, как долго существует язык C, и новые функции могут не считаться чистыми. Действительно, исходя из ответа Майка, C99 еще даже не используется по умолчанию в GCC. - person mah; 21.12.2012
comment
@mah Основываясь на ответе Майка, C89 еще даже не используется по умолчанию в GCC. Цвет меня не впечатлил. - person melpomene; 21.12.2012