Декларация в за израз в c

Възможен дубликат:
C: for loop 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;
}

с (по подразбиране "gnu89") gcc ще ви даде отговора:

Във функция main :
грешка: първоначалните декларации на цикъл '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