Сведения о вопросе

GANGST1ER

12:16, 16th August, 2020

Теги

c   gcc   for-loop    

Как исправить ошибку "for loop initial declaration used outside C99 mode" GCC?

Просмотров: 998   Ответов: 10

Я пытаюсь решить проблему 3n+1 , и у меня есть цикл for , который выглядит следующим образом:

for(int i = low; i <= high; ++i)
        {
                res = runalg(i);
                if (res > highestres)
                {
                        highestres = res;
                }

        }

К сожалению, я получаю эту ошибку, когда пытаюсь скомпилировать с GCC:

3np1.c:15: ошибка: 'for' начальный цикл объявление, используемое вне режима C99

Я не знаю, что такое режим C99. Есть какие-нибудь идеи?



  Сведения об ответе

dump

19:42, 25th August, 2020

Я бы попытался объявить i вне цикла!

Удачи в решении задачи 3n+1 :-)

Вот вам пример:

#include <stdio.h>

int main() {

   int i;

   /* for loop execution */
   for (i = 10; i < 20; i++) {
       printf("i: %d\n", i);
   }   

   return 0;
}

Подробнее о циклах в C читайте здесь .


  Сведения об ответе

ЯЯ__4

03:55, 6th August, 2020

Существует переключатель компилятора, который включает режим C99, который среди прочего позволяет объявлять переменную внутри цикла for. Чтобы включить его, используйте переключатель компилятора -std=c99

Или, как говорит @OysterD, объявите переменную вне цикла.


  Сведения об ответе

PROGA

21:06, 1st October, 2020

Чтобы перейти в режим C99 в CodeBlocks, выполните следующие действия:

Щелкните параметры проекта / сборки , затем на вкладке Параметры компилятора выберите вложенную вкладку другие параметры, поместите -std=c99 в текстовую область и нажмите кнопку ОК .

Это позволит включить режим C99 для вашего компилятора.

Надеюсь, это кому-то поможет!


  Сведения об ответе

P_S_S

18:14, 23rd August, 2020

Я тоже получил эту ошибку.

for (int i=0;i<10;i++) { ..

не действует в стандарте C89/C90. Как говорит OysterD, вам нужно сделать:

int i;
for (i=0;i<10;i++) { ..

Ваш исходный код разрешен в стандартах C99 и более поздних стандартах языка C.


  Сведения об ответе

DINO

17:08, 13th August, 2020

@Blorgbeard :

Новые возможности в C99

  • встроенная функция
  • объявление переменной больше не ограничивается областью действия файла или началом составного оператора
  • несколько новых типов данных, включая long long int, необязательные расширенные целочисленные типы, явный логический тип данных и сложный тип для представления комплексных чисел
  • массивы переменной длины
  • поддержка однострочных комментариев, начинающихся с//, как в BCPL или C++
  • новые библиотечные функции, такие как snprintf
  • новые заголовочные файлы, такие как stdbool.h и inttypes.h
  • тип-общие математические функции (tgmath.h)
  • улучшена поддержка IEEE с плавающей точкой
  • назначенные инициализаторы
  • составные литералы
  • поддержка variadic macros (macros переменной арности)
  • ограничьте квалификацию, чтобы разрешить более агрессивную оптимизацию кода

http://en.wikipedia.org/wiki/C99

Экскурсия по С99


  Сведения об ответе

LAST

03:26, 2nd August, 2020

если вы компилируете в C change

for (int i=0;i<10;i++) { ..

к

int i;
for (i=0;i<10;i++) { ..

Вы также можете компилировать с помощью набора переключателей C99. Put-std=c99 в строке компиляции:

gcc -std=c99 foo.c -o foo

REF: http://cplusplus.syntaxerrors.info/index.php?название= " за " _loop_initial_declaration_used_outside_C99_mode


  Сведения об ответе

fo_I_K

03:52, 2nd August, 2020

У меня была та же проблема, и она работает, вам просто нужно объявить i вне цикла:

int i;

for(i = low; i <= high; ++i)

{
        res = runalg(i);
        if (res > highestres)
        {
                highestres = res;
        }

}


  Сведения об ответе

LAST

05:08, 29th August, 2020

Для тех, кто пытается скомпилировать код из внешнего источника, использующего автоматизированную утилиту сборки, такую как Make, чтобы избежать необходимости отслеживать явные вызовы компиляции gcc, можно задать переменную среды. Введите в командной строке или введите .bashrc (или .bash_profile на Mac):

export CFLAGS="-std=c99"

Обратите внимание, что аналогичное решение применяется при выполнении аналогичного сценария с компиляцией C++, которая требует C++ 11, можно использовать:

export CXXFLAGS="-std=c++11"


  Сведения об ответе

ITSME

17:56, 20th August, 2020

Для Qt-creator: просто добавьте следующие строки в файл*. pro...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99


  Сведения об ответе

nYU

03:03, 2nd August, 2020

Джихен Стамбули ответила на OP вопрос наиболее прямо... Вопрос был такой; почему

for(int i = low; i <= high; ++i)
{
    res = runalg(i);
    if (res > highestres)
    {
        highestres = res;
    }
}

произвести ошибку;

3np1.c:15: error: 'for' loop initial declaration used outside C99 mode

за что и будет дан ответ

for(int i = low...

должно быть

int i;
for (i=low...


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться