При компиляции кода C я получил следующее сообщение об ошибке:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
Что это значит?
Как это исправить?
При компиляции кода C я получил следующее сообщение об ошибке:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code
Что это значит?
Как это исправить?
Вы сделали это:
for (int i=0;i<10;i++) {
И вам нужно изменить его на это:
int i;
for (i=0;i<10;i++) {
Или, как говорится в ошибке,
используйте команду -std = c99 или -std = gnu99 для компиляции вашего кода.
Обновить, скопированный из ответа Ryan Fox:
gcc -std=c99 foo.c -o foo
Или, если вы используете стандартный make файл, добавьте его в переменную CFLAGS.
Вам все равно потребуется 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 (aka C89, это то же самое) и C99.
Включение режима C99 дает вам много классных материалов, но также отключает некоторые другие интересные вещи, которые gcc разрешает по умолчанию, например анонимные структуры и объединения внутри структур и объединений.
-std=gnu99
, вероятно, позволяет "все лакомства", но я предостерегаю вас от этого. Это сделает ненужные трудности, если вы (или другие) захотите перенести код. У меня, вероятно, была бы версия для Windows моего проекта для животных, которую кто-то мог бесплатно портировать, если бы я не сделал этого. Он связывает вас gcc. Вы не хотите быть привязанным. Это целая черта стандартов.Другие ответы дают вам возможность работать с режимом GCC по умолчанию. Если вы хотите использовать C99 (что я рекомендую в целом), вы должны добавить этот флаг компилятора:
gcc -std=c99 foo.c -o foo
Или, если вы используете стандартный make файл, добавьте его в переменную CFLAGS.
Это означает, что вы не можете объявлять переменные в инструкции for
.
Вам следует:
int i ;
for( i = 0 ; i < len ; i++ )
Что вы, вероятно, делаете
for( int i = 0 ; i < len ; i++ )