就像标题说我需要让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
合作?
由于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
。
我只是一个学习者(初学者 - 非常新)但我希望这可能会有所帮助(尽管线程已经老了)。
(图像中可见的代码是示例12.2 - 来自Stephen Prata C Primer Plus的forc99.c)
我创造了新的旗帜
设置 - >编译器 - >(一般情况下)右键单击常规 - >新标志 - >从图像输入详细信息 - >确定之后选中刚刚创建的新标志的框。 (为我工作)
[如果您查看图像中有-std = c99选项(就在我创建的选项上方),您可以使用该选项进行c99支持。
(顺便说一下gcc版本代码::块16.01 mingw 32bit,我用这个,是4.9.2)
假设Windows的Codeblocks 13.12,它附带了不支持C11的旧版GCC(4.7.1)。
C:\Program Files\mingw-w64\x86_64-4.9.1-win32-seh-rt_v3-rev1\mingw64
这样一些不起眼的文件夹中。x86_64-w64-mingw32-gcc.exe
(因为您现在可能在计算机上安装了多个GCC)并且make程序是mingw32-make.exe
。-std=c11
中的编译器标志类型。单击确定并检查刚刚创建的新C11选项。转到设置 - >编译器 - >编译器标志 - >常规 - >勾选“让g ++跟随c ++ 11 ISO”旁边的框!
我在CodeBlock项目中也遇到了同样的问题。我正在使用版本CodeBlock版本:17.12。
我修复了以下步骤:
希望它也适合你们。
原因是因为你声明我在循环中。尝试将其分开如下:
#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;
}
它会工作。快乐编码:)
转到“设置” - >“编译器”,然后看到选项“c ++ 11 ISO inc compiler”设置选项卡。