Вам все равно потребуется C99, если вы хотите смешивать утверждения и объявления переменных. Как и другие ответы и само сообщение об ошибке, добавьте -std=c99
в командную строку при компиляции, чтобы включить функции C99 [1].
Но вам всегда разрешалось писать составной оператор («блок», IOW, но стандарт никогда не использует это слово!) Вместо одного утверждения.
#include<stdio.h>
int main() {
int i = 5;
{ /* new block, new declarations. */
int i;
for (i=0;i<10;i++){
}
}
printf("%d\n", i); /* prints "5\n" */
}
Это законно в K & R, C90 (ака C89, это то же самое), и C99.
Включение режима C99 дает вам много cool stuff, но также отключает другие интересные материалы, которые gcc разрешает по умолчанию, например анонимные структуры и объединения внутри структур и объединений.
-std=gnu99
, вероятно, включает в себя «все лакомства», но я предостерегаю вас, чтобы этого не делалось.Это сделает ненужные трудности, если вы (или другие) захотите перенести код. У меня, вероятно, была бы версия для Windows моего проекта для животных, которую кто-то мог бесплатно портировать, если бы я не сделал этого. Он связывает вас gcc. Вы не хотите быть привязанным. Это целая черта стандартов.
Ну, может быть, показ кода будет хорошим началом. – OldProgrammer
Вывести инициализацию из цикла for. – Mysticial
Компилятор говорит, как исправить это в сообщении об ошибке. – chris