Как использовать стандарт C11 в Code::Blocks
Как гласит название, мне нужно сделать code::blocks
работать с C11
и я не могу понять, как это сделать.
я пошел в settings
=> compiler settings
=> Other options
и я добавил -std=c11
и попробовал также с -std=gnu11
, оба не похоже на работу.
Я скомпилировал gcc-5.2
а затем я изменил компилятор по умолчанию (gcc-4.9) и до сих пор нет результата.
Когда я пытаюсь скомпилировать следующую программу:
#include<stdio.h>
int main(void){
int arr[] = {0,1,2,3,4};
for(int i=0;i<5;i++){
printf("%d ",arr[i]);
}
return 0;
}
Я получаю следующее:
|6|error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode|
Но если я делаю это в терминале (Ubuntu 15.04, 64BIT, gcc-5.2):
./install/gcc-5.2.0/bin/gcc5.2 program.c -o program
Кажется, работает нормально.
У меня вопрос, как сделать code::blocks
работать с c11
?
6 ответов
Поскольку версии GCC 5.x работают с -std=gnu11
по умолчанию Code::Blocks должен что-то делать (например, передавать -ansi
или же -std=gnu90
) компилятору, чтобы он работал по-другому.
Изучите все параметры, которые отправляются компилятору. Найдите способ, чтобы Code::Blocks показывал вам точное заклинание, которое он использует при компиляции. Тогда решите, как это исправить.
Опции, которые используются:
-Wall -Wextra -Werror -Wstrict-prototypes -Wconversion -std=gnu11 \ -O0 -g -ansi `pkg-config --cflags gtk+-3.0`
-ansi
наносит ущерб; это эквивалентно -std=c90
или возможно -std=gnu90
- это явно отменяет -std=c11
или же -std=gnu11
,
Предполагая Codeblocks 13.12 для Windows, он поставляется с более старой версией GCC (4.7.1), которая не поддерживает C11.
- Вручную загрузите последнюю версию компилятора Mingw 64 (я не думаю, что Mingw32 поддерживается для включения GCC-версий C11).
- Установите это. Это будет в какой-то непонятной папке, как
C:\Program Files\mingw-w64\x86_64-4.9.1-win32-seh-rt_v3-rev1\mingw64
, - Добавьте указанный выше путь в Codeblocks, Настройки -> Компилятор -> вкладка Исполняемые файлы Toolchain -> Каталог установки компилятора. Нажмите кнопку "автоопределение".
- На той же вкладке убедитесь, что компилятор C
x86_64-w64-mingw32-gcc.exe
(поскольку теперь у вас может быть несколько установок GCC на вашем компьютере), и программа makemingw32-make.exe
, - Во вкладке "Настройки компилятора" щелкните правой кнопкой мыши список флагов компилятора и выберите "Новый флаг". Для типа name в C11, для флагов компилятора введите
-std=c11
, Нажмите "ОК" и проверьте новую опцию C11, которую вы только что создали. - Также, чтобы обеспечить соответствие C11, отметьте опцию "рассматривать ошибки как предупреждения, требуемые ISO C..." (-pedantic-errors). Проверьте опцию "Включить все общие предупреждения компилятора" (-Wall).
Я просто ученик (новичок - очень новый), но я надеюсь, что это может помочь (хотя ветка старая).
(код, видимый на изображении, является примером 12.2 - forc99.c от Stephen Prata C Primer Plus)
Я создал новый флаг
Настройки -> Компилятор -> (под общим) Щелкните правой кнопкой мыши на общем -> Новый флаг -> Введите детали с изображения -> ОК. После этого установите флажок только что созданного нового флага. (работал для меня)
[Если вы посмотрите на изображение, есть опция для -std = c99 (чуть выше той, которую я создал), вы можете использовать эту опцию для поддержки c99.]
(Кстати версия gcc для code::blocks 16.01 mingw 32bit, я использую это, 4.9.2)
Перейдите в Настройки-> Компилятор-> Флаги компилятора-> Общие-> установите флажок рядом с "Пусть g++ следует C++11 ISO".
Зайдите в Настройки -> Настройки компилятора
https://stackru.com/images/2d677f2dba8469e 1095d76cdcb4fc58cc118864d.png Убедитесь, что на левой вкладке выбраны глобальные настройки компилятора.
На правой вкладке нажмите на вкладку настроек компилятора. В разделе "Общие" установите флажок "Пусть gcc следует стандарту языка ISO C 1999 года [-std=c99]
Я также столкнулся с той же проблемой в моем проекте CodeBlock. Я использую версию CodeBlock Версия:17.12.
Я исправил следующие шаги:
- Перейдите в Настройки -> Вкладка Copmpiler.
- "Глобальные настройки компилятора": pop is openend.
- Проверьте выбранный компилятор: " GNU GCC Compiler"
- Выберите вкладку "Флаг компилятора".
- Установите следующие флажки:
- Пусть g ++ соответствует стандарту языка C++11 ISO C++
- GCC должен следовать стандарту ISO C 2011 года
- Сохраните настройки.
- Теперь я могу выполнить код C++ 11.
Надеюсь, это сработает и у вас, ребята.
Причина в том, что вы объявляете цикл i for. Попробуйте отделить его, как показано ниже:
#include<stdio.h>
int main(void)
{
int arr[] = {0,1,2,3,4};
int i;
for(i=0;i<5;i++){
printf("%d ",arr[i]);
}
return 0;
}
Это будет работать. Удачного кодирования:)
Перейдите в "setting" -> "compiler", затем посмотрите опцию, следуя вкладке "C++11 ISO inc compiler".