Подтвердить что ты не робот

C: для начального объявления цикла int

Может кто-нибудь уточнить следующую ошибку gcc?

$ gcc -o Ctutorial/temptable.out temptable.c 
temptable.c: In function ‘main’:
temptable.c:5: error: ‘for’ loop initial declaration used outside C99 mode

temptable.c:

...
/* print Fahrenheit-Celsius Table */
main()
{
    for(int i = 0; i <= 300; i += 20)
    {
        printf("F=%d C=%d\n",i, (i-32) / 9);        
    }
}

P.S: Я смутно помню, что int i должен быть объявлен перед циклом for. Я должен указать, что я ищу ответ, который дает исторический контекст стандарта C.

4b9b3361

Ответ 1

for (int i = 0; ...) 

- это синтаксис, который был введен в C99. Чтобы использовать его, вы должны включить режим C99, передав -std=c99 (или некоторый более поздний стандарт) в GCC. Версия C89:

int i;
for (i = 0; ...)

ИЗМЕНИТЬ

Исторически, язык C всегда заставлял программистов объявлять все переменные в начале блока. Так что-то вроде:

{
   printf("%d", 42); 
   int c = 43;  /* <--- compile time error */

необходимо переписать как:

{
   int c = 43;
   printf("%d", 42);

блок определяется как:

block := '{' declarations statements '}'

C99, С++, С# и Java разрешают объявление переменных в любом месте блока.

Настоящая причина (угадывание) заключается в распределении внутренних структур (например, вычислении размера стека) ASAP при анализе источника C, без перехода на другой проход компилятора.

Ответ 2

До C99 вам нужно было определить локальные переменные в начале блока. C99 импортировал функцию С++, которая позволяет смешивать локальные определения переменных с инструкциями, и вы можете определять переменные в управляющих выражениях for и while.