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); } } 

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

 for (int i = 0; ...) 

является синтаксисом, который был введен в C99. Чтобы использовать его, вы должны включить режим C99, передав в -std=c99 (или более поздний стандарт). Версия 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, C ++, C # и Java разрешают объявление переменных в любом месте блока.

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

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

Давайте будем гением компьютера.