I’m trying to solve the 3n+1 problem and I have a for
loop that looks like this:
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
Unfortunately I’m getting this error when I try to compile with GCC:
3np1.c:15: error: ‘for’ loop initial
declaration used outside C99 mode
I don’t know what C99 mode is. Any ideas?
Sina
6077 silver badges22 bronze badges
asked Aug 24, 2008 at 6:30
The.Anti.9The.Anti.9
42.6k47 gold badges122 silver badges161 bronze badges
I’d try to declare i
outside of the loop!
Good luck on solving 3n+1
Here’s an example:
#include <stdio.h>
int main() {
int i;
/* for loop execution */
for (i = 10; i < 20; i++) {
printf("i: %dn", i);
}
return 0;
}
Read more on for loops in C here.
dhilt
17.5k8 gold badges66 silver badges80 bronze badges
answered Aug 24, 2008 at 6:31
2
There is a compiler switch which enables C99 mode, which amongst other things allows declaration of a variable inside the for loop. To turn it on use the compiler switch -std=c99
Or as @OysterD says, declare the variable outside the loop.
answered Aug 24, 2008 at 6:46
JamesSugrueJamesSugrue
14.8k9 gold badges63 silver badges93 bronze badges
2
To switch to C99 mode in CodeBlocks, follow the next steps:
Click Project/Build options, then in tab Compiler Settings choose subtab Other options, and place -std=c99
in the text area, and click Ok.
This will turn C99 mode on for your Compiler.
I hope this will help someone!
answered Dec 1, 2014 at 9:57
akelecakelec
3,6853 gold badges42 silver badges39 bronze badges
3
I’ve gotten this error too.
for (int i=0;i<10;i++) { ..
is not valid in the C89/C90 standard. As OysterD says, you need to do:
int i;
for (i=0;i<10;i++) { ..
Your original code is allowed in C99 and later standards of the C language.
answered Aug 24, 2008 at 6:50
BlorgbeardBlorgbeard
99.7k48 gold badges226 silver badges270 bronze badges
6
@Blorgbeard:
New Features in C99
- inline functions
- variable declaration no longer restricted to file scope or the start of a compound statement
- several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers
- variable-length arrays
- support for one-line comments beginning with //, as in BCPL or C++
- new library functions, such as snprintf
- new header files, such as stdbool.h and inttypes.h
- type-generic math functions (tgmath.h)
- improved support for IEEE floating point
- designated initializers
- compound literals
- support for variadic macros (macros of variable arity)
- restrict qualification to allow more aggressive code optimization
http://en.wikipedia.org/wiki/C99
A Tour of C99
answered Aug 25, 2008 at 11:41
ImranImran
85.2k23 gold badges97 silver badges130 bronze badges
if you compile in C change
for (int i=0;i<10;i++) { ..
to
int i;
for (i=0;i<10;i++) { ..
You can also compile with the C99 switch set. Put -std=c99 in the compilation line:
gcc -std=c99 foo.c -o foo
REF: http://cplusplus.syntaxerrors.info/index.php?title=’for’_loop_initial_declaration_used_outside_C99_mode
answered Apr 8, 2013 at 5:25
For anyone attempting to compile code from an external source that uses an automated build utility such as Make, to avoid having to track down the explicit gcc compilation calls you can set an environment variable. Enter on command prompt or put in .bashrc (or .bash_profile on Mac):
export CFLAGS="-std=c99"
Note that a similar solution applies if you run into a similar scenario with C++ compilation that requires C++ 11, you can use:
export CXXFLAGS="-std=c++11"
answered Jun 27, 2018 at 15:37
MinkMink
8072 gold badges10 silver badges24 bronze badges
0
Jihene Stambouli answered OP question most directly…
Question was;
why does
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
produce the error;
3np1.c:15: error: 'for' loop initial declaration used outside C99 mode
for which the answer is
for(int i = low...
should be
int i;
for (i=low...
answered Oct 7, 2018 at 6:51
Enable C99 mode in Code::Blocks 16.01
- Go to Settings-> Compiler…
- In Compiler Flags section of Compiler settings tab, select checkbox ‘Have gcc follow the 1999 ISO C language standard [-std=c99]‘
answered Jul 29, 2019 at 10:57
Jobayer AhmmedJobayer Ahmmed
1,8263 gold badges15 silver badges20 bronze badges
I had the same problem and it works you just have to declare the i
outside of the loop:
int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
James
4,6155 gold badges36 silver badges48 bronze badges
answered Sep 12, 2013 at 22:57
For Qt-creator: just add next lines to *.pro file…
QMAKE_CFLAGS_DEBUG =
-std=gnu99
QMAKE_CFLAGS_RELEASE =
-std=gnu99
answered May 29, 2013 at 14:27
Вопрос:
Я пытаюсь решить проблему 3n + 1, и у меня есть цикл for
, который выглядит следующим образом:
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
К сожалению, я получаю эту ошибку, когда пытаюсь скомпилировать GCC:
3np1.c: 15: ошибка: “для” начального цикла декларация, используемая вне режима C99
Я не знаю, что такое режим C99. Любые идеи?
Лучший ответ:
Я попытался бы объявить i
вне цикла!
Удачи в решении 3n + 1: -)
Вот пример:
#include <stdio.h>
int main() {
int i;
/* for loop execution */
for (i = 10; i < 20; i++) {
printf("i: %dn", i);
}
return 0;
}
Подробнее о циклах в C здесь.
Ответ №1
Существует компилятор, который позволяет режим C99, который, среди прочего, позволяет объявлять переменную внутри цикла for. Чтобы включить его, используйте переключатель компилятора -std=c99
Или, как говорит @OysterD, объявите переменную вне цикла.
Ответ №2
Чтобы перейти в режим C99 в CodeBlocks, выполните следующие шаги:
Нажмите Параметры проекта/сборки, затем в закладке Параметры компилятора выберите subtab Другие параметры и поместите -std=c99
в текстовую область, и нажмите ОК.
Это приведет к включению режима C99 для вашего компилятора.
Я надеюсь, что это поможет кому-то!
Ответ №3
Я тоже получил эту ошибку.
for (int i=0;i<10;i++) { ..
недействителен в стандарте C89/C90. Как говорит OysterD, вам нужно сделать:
int i;
for (i=0;i<10;i++) { ..
Ваш исходный код разрешен в C99 и более поздних версиях языка C.
Ответ №4
@Blorgbeard:
Новые функции на C99
- встроенные функции
- Объявление переменной больше не ограничивается областью файлов или началом составного оператора
- несколько новых типов данных, включая long long int, необязательные расширенные целочисленные типы, явный тип данных булева и сложный тип для представления комплексных чисел
- массивы переменной длины
- поддержка однострочных комментариев, начинающихся с //, как в BCPL или С++
- новые функции библиотеки, такие как snprintf
- новые файлы заголовков, такие как stdbool.h и inttypes.h
- Тип-общие математические функции (tgmath.h)
- улучшенная поддержка плавающей точки IEEE
- назначенные инициализаторы
- составные литералы
- поддержка переменных массивов (макросов переменной arity)
- ограничить квалификацию, чтобы обеспечить более агрессивную оптимизацию кода.
http://en.wikipedia.org/wiki/C99
Прогулка по C99
Ответ №5
если вы компилируете в C изменения
for (int i=0;i<10;i++) { ..
в
int i;
for (i=0;i<10;i++) { ..
Вы также можете скомпилировать с помощью набора переключателей C99. Поместите -std = c99 в строку компиляции:
gcc -std=c99 foo.c -o foo
REF: http://cplusplus.syntaxerrors.info/index.php?title=‘for’_loop_initial_declaration_used_outside_C99_mode
Ответ №6
Для любого, кто пытается скомпилировать код из внешнего источника, который использует утилиту автоматической сборки, такую как Make, чтобы избежать необходимости отслеживать явные вызовы компиляции gcc, вы можете установить переменную окружения. Введите в командной строке или введите .bashrc (или .bash_profile на Mac):
export CFLAGS="-std=c99"
Обратите внимание, что подобное решение применимо, если вы столкнетесь с похожим сценарием с компиляцией C++, для которой требуется C++ 11, вы можете использовать:
export CXXFLAGS="-std=c++11"
Ответ №7
У меня была такая же проблема, и вам нужно просто объявить i
вне цикла:
int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
Ответ №8
Jihene Stambouli ответил на вопрос 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...
Ответ №9
Включить режим C99 в Code :: Blocks 16.01
- Перейдите в Настройки -> Компилятор…
- В разделе Флаги компилятора вкладки настроек компилятора установите флажок “Пусть gcc будет соответствовать языковому стандарту ISO C 1999 года [-std = c99]“
Ответ №10
Для Qt-creator: просто добавьте следующие строки в файл *.pro…
QMAKE_CFLAGS_DEBUG =
-std=gnu99
QMAKE_CFLAGS_RELEASE =
-std=gnu99
Ответ №11
Просто скомпилируйте в режиме С++. Вам не нужно использовать классы для использования С++. Я в основном использую С++ как “лучше C”:)
Я почти никогда не использую классы и никогда не использую метод override.
sotoges 0 / 0 / 0 Регистрация: 19.10.2017 Сообщений: 10 |
||||
1 |
||||
15.12.2017, 01:14. Показов 16751. Ответов 4 Метки нет (Все метки)
Возникшие проблемы с кодом: Кликните здесь для просмотра всего текста
main.c||In function ‘print’:| Код:
__________________
0 |
sotoges 0 / 0 / 0 Регистрация: 19.10.2017 Сообщений: 10 |
||||
15.12.2017, 01:32 [ТС] |
2 |
|||
Возникшие проблемы с кодом: Кликните здесь для просмотра всего текста
main.c||In function ‘main’:|
0 |
3532 / 2196 / 401 Регистрация: 09.09.2017 Сообщений: 9,050 |
|
15.12.2017, 08:48 |
3 |
main.c|9|error: unknown type name ‘foat’| Возможно, имелся в виду float?
main.c|19|error: ‘for’ loop initial declarations are only allowed in C99 mode| Либо включите совместимость с С99 или выше (в gcc это -std=c99), собственно, в следующей строке вам это и написали, либо вынесите объявление переменной в начало функции.
0 |
14 / 14 / 0 Регистрация: 01.12.2017 Сообщений: 577 |
|
15.12.2017, 12:51 |
4 |
int i объяви в начале функции. а в for (i=0;i<=size; i++)
0 |
LaFayette 48 / 48 / 57 Регистрация: 25.11.2015 Сообщений: 140 |
||||
15.12.2017, 13:11 |
5 |
|||
main.c||In function ‘print’:| Инициализация в цикле for доступна начиная со стандарта С99. Для использования стандарта во время компиляции нужно добавить опцию -std=c99. Например
0 |
Я пытаюсь решить проблему 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: %dn", 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...
Я пытаюсь решить проблема 3n + 1 и у меня есть for
цикл, который выглядит так:
for(int i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
К сожалению, я получаю эту ошибку, когда пытаюсь скомпилировать с GCC:
3np1.c: 15: error: начальное объявление цикла for, используемое вне режима C99
Я не знаю, что такое режим C99. Любые идеи?
11 ответы
Я бы попытался объявить i
вне цикла!
Удачи в решении 3n + 1
Вот пример:
#include <stdio.h>
int main() {
int i;
/* for loop execution */
for (i = 10; i < 20; i++) {
printf("i: %dn", i);
}
return 0;
}
Подробнее о циклах в C здесь.
Создан 08 ноя.
Есть переключатель компилятора, который позволяет C99 режим, который, помимо прочего, позволяет объявлять переменную внутри цикла for. Чтобы включить его, используйте переключатель компилятора -std=c99
Или, как говорит @OysterD, объявите переменную вне цикла.
Создан 15 ноя.
Чтобы переключиться на C99 режима в Кодовые блоки, выполните следующие действия:
Нажмите Варианты проекта / сборки, затем во вкладке Настройки компилятора выбрать вложенную вкладку Другие варианты, и место -std=c99
в текстовой области и щелкните Ok.
Это превратится C99 включен для вашего компилятора.
Надеюсь, это кому-то поможет!
ответ дан 02 апр.
Я тоже получил эту ошибку.
for (int i=0;i<10;i++) { ..
не действует в стандарте C89 / C90. Как говорит OysterD, вам нужно сделать:
int i;
for (i=0;i<10;i++) { ..
Ваш исходный код разрешен в C99 и более поздних стандартах языка C.
Создан 13 сен.
@Блоргберд:
Новые возможности C99
- встроенные функции
- объявление переменной больше не ограничивается областью файла или началом составного оператора
- несколько новых типов данных, включая long long int, необязательные расширенные целочисленные типы, явный логический тип данных и сложный тип для представления комплексных чисел
- массивы переменной длины
- поддержка однострочных комментариев, начинающихся с //, как в BCPL или C ++
- новые библиотечные функции, такие как snprintf
- новые файлы заголовков, такие как stdbool.h и inttypes.h
- типовые математические функции (tgmath.h)
- улучшенная поддержка плавающей запятой IEEE
- назначенные инициализаторы
- составные литералы
- поддержка вариативных макросов (макросов переменной арности)
- ограничить квалификацию, чтобы разрешить более агрессивную оптимизацию кода
http://en.wikipedia.org/wiki/C99
Экскурсия по C99
ответ дан 23 мая ’17, 13:05
если вы компилируете в C, измените
for (int i=0;i<10;i++) { ..
в
int i;
for (i=0;i<10;i++) { ..
Вы также можете скомпилировать с набором переключателей C99. Поместите -std = c99 в строку компиляции:
gcc -std=c99 foo.c -o foo
Рекомендации: http://cplusplus.syntaxerrors.info/index.php?title=’for’_loop_initial_declaration_used_outside_C99_mode
ответ дан 08 апр.
Для всех, кто пытается скомпилировать код из внешнего источника, который использует служебную программу автоматической сборки, такую как MAKE, чтобы избежать необходимости отслеживать явные вызовы компиляции gcc, вы можете установить переменную среды. Введите в командной строке или введите .bashrc (или .bash_profile на Mac):
export CFLAGS="-std=c99"
Обратите внимание, что аналогичное решение применимо, если вы столкнетесь с аналогичным сценарием с компиляцией C ++, для которой требуется C ++ 11, вы можете использовать:
export CXXFLAGS="-std=c++11"
Создан 27 июн.
Джихене Стамбули ответил на вопрос ОП наиболее прямо … Вопрос был; Почему
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...
ответ дан 07 окт ’18, 07:10
У меня была такая же проблема, и она работает, вам просто нужно объявить i
вне цикла:
int i;
for(i = low; i <= high; ++i)
{
res = runalg(i);
if (res > highestres)
{
highestres = res;
}
}
Создан 13 сен.
Включить режим C99 в Code :: Blocks 16.01
- Перейдите в Настройки-> Компилятор …
- In Флаги компилятора раздел Настройки компилятора вкладка, установите флажок ‘Следуйте стандарту языка C ISO от 1999 г. [-std = c99]‘
Создан 29 июля ’19, 11:07
Для Qt-creator: просто добавьте следующие строки в файл * .pro …
QMAKE_CFLAGS_DEBUG =
-std=gnu99
QMAKE_CFLAGS_RELEASE =
-std=gnu99
ответ дан 29 мая ’13, 15:05
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками
c
gcc
for-loop
or задайте свой вопрос.