如何在Code :: Blocks中使用C11标准

时间:2015-12-08 18:27:56

标签: c codeblocks c11 gcc5.2

与标题一样,我需要code::blocksC11合作,我无法弄清楚如何做到这一点。

我去了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::blocksc11合作?

8 个答案:

答案 0 :(得分:5)

由于默认情况下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

答案 1 :(得分:3)

我只是一个学习者(初学者 - 非常新)但我希望这可能会有所帮助(尽管线程已经老了)。

(图片中可见的代码是示例12.2 - 来自Stephen Prata C Primer Plus的forc99.c)

code_blocks_16.01

我创建了新旗帜

设置 - &gt;编译器 - &gt; (一般情况下)右键点击一般 - &gt;新旗帜 - &gt;从图像输入详细信息 - &gt;好 之后,选中刚刚创建的新标志的框。 (为我工作)

[如果您查看图像中有-std = c99的选项(就在我创建的那个上方),您可以使用该选项进行c99支持。]

(顺便说一下gcc版本代码::块16.01 mingw 32bit,我用的是4.9.2)

答案 2 :(得分:2)

假设Windows的Codeblocks 13.12,它附带了一个不支持C11的旧版GCC(4.7.1)。

  • 手动下载最新版本的Mingw 64编译器(我不认为Mingw32可以包含GCC版本的C11)。
  • 安装它。它最终会出现在像C:\Program Files\mingw-w64\x86_64-4.9.1-win32-seh-rt_v3-rev1\mingw64
  • 这样的模糊文件夹中
  • 在Codeblocks,Settings - &gt;中添加以上路径编译器 - &gt;工具链可执行文件选项卡 - &gt;编译器的安装目录。点击&#34;自动检测&#34;按钮。
  • 在同一选项卡中,检查C编译器是否为x86_64-w64-mingw32-gcc.exe(因为您现在可能在计算机上安装了多个GCC)并且make程序为mingw32-make.exe
  • 在选项卡编译器设置中,右键单击编译器标志列表,然后选择&#34; New flag&#34;。对于&#34; name&#34;键入C11,在-std=c11中键入编译器标志。单击“确定”并检查刚刚创建的新C11选项。
  • 另外为了确保C11符合性,请检查选项&#34;将错误视为ISO C所要求的警告......&#34; (-pedantic-错误)。检查选项&#34;启用所有常见编译器警告&#34; (-Wall)。

答案 3 :(得分:1)

转到设置 - &gt;反编译&GT;编译器标志 - &gt;常规 - &GT;勾选&#34;旁边的框让g ++遵循c ++ 11 ISO&#34; DONE !!!

答案 4 :(得分:0)

我在CodeBlock项目中也遇到了同样的问题。 我正在使用CodeBlock版本:17.12。

我通过以下步骤进行了修复:

  1. 转到设置-> Copmpiler选项卡。
  2. “全局编译器设置:”弹出框是开放式的。
  3. 检查选定的编译器:“ GNU GCC编译器”
  4. 选择“编译器标记”标签。
  5. 选中以下复选框:
    • 使g ++遵循C ++ 11 ISO C ++语言标准
    • gcc遵循2011 ISO C语言标准
  6. 保存设置。
  7. 现在,我可以编译C ++ 11代码了。

希望它也对你们有用。

答案 5 :(得分:0)

转到设置->编译器设置

确保选择了左侧标签上的全局编译器设置。

enter image description here

在右侧的选项卡上,单击“编译器设置”选项卡。一般情况下,选中“使gcc遵循1999 ISO C语言标准[-std = c99]

enter image description here

答案 6 :(得分:-2)

原因是因为你声明我在循环中。 尝试将其分开,如下所示:

#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;
        }

它会起作用。快乐的编码:)

答案 7 :(得分:-2)

转到“设置” - &gt; “编译器”,然后看到选项跟随“c ++ 11 ISO inc compiler”设置选项卡。

enter image description here