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

Как скомпилировать проект C в режиме C99?

При компиляции кода C я получил следующее сообщение об ошибке:

error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code

Что это значит?

Как это исправить?

4b9b3361

Ответ 1

Вы сделали это:

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.

Ответ 2

Вам все равно потребуется 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. Вы не хотите быть привязанным. Это целая черта стандартов.

Ответ 3

Другие ответы дают вам возможность работать с режимом GCC по умолчанию. Если вы хотите использовать C99 (что я рекомендую в целом), вы должны добавить этот флаг компилятора:

gcc -std=c99 foo.c -o foo

Или, если вы используете стандартный make файл, добавьте его в переменную CFLAGS.

Ответ 4

Это означает, что вы не можете объявлять переменные в инструкции for.

Вам следует:

int i ;
for( i = 0 ; i < len ; i++ )

Что вы, вероятно, делаете

for( int i = 0 ; i < len ; i++ )