首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最小c11源代码

最小c11源代码
EN

Stack Overflow用户
提问于 2016-06-15 09:27:20
回答 2查看 280关注 0票数 0

我开始将我的C知识从C99升级到C11,我想知道我的编译器在默认情况下是否能够理解C11,或者我需要-std=c11标志;我如何用不使用-std=c99标志编译的简单c11源代码来测试它呢?还有C++11标准,但我从这篇文章开始,这只是关于C的。

我尝试使用一些使用auto声明的简单代码,但是由于它是一个有效的关键字(在C99中也是一个有效的关键字),所以我有点不知所措,在这里询问。

在发布这个问题之后,我收到了有关宏__STDC__VERSION__的答案,并尝试了这个答案的代码。

令人惊讶的是,我的测试结果是:

代码语言:javascript
运行
复制
compile line: gcc main.c -std=c11 -o main.exe
oputput of main.exe: c11

compile line: gcc main.c -std=c99 -o main.exe
oputput of main.exe: c99

compile line: gcc main.c -o main.exe
oputput of main.exe: gnu90

情况是,我可以在运行时获得编译器功能,但在编译时仍然没有。

对于C++,我找到了只使用C++11编译的示例代码:

代码语言:javascript
运行
复制
int main()
{
    int *p = nullptr;
}

因为nullptr仅在C++11中可用。

EN

回答 2

Stack Overflow用户

发布于 2016-06-15 09:37:48

GCC从4.x开始添加C11支持。他们逐渐增加了越来越多的C11支持。但是所有4.x版本都默认为-std=gnu90

GCC从5.0及更高版本应该默认为-std=gnu11,并将理解C11。因此,为了了解gcc的默认设置,只需查看gcc --version

请注意,这与标准C不一样。如果要使用纯标准C,则必须始终使用-std=c11 -pedantic-errors。我强烈建议经常使用这两个开关,特别是在学习C时。

在编程上,您可以检查编译器设置为哪个版本,如下所示:

代码语言:javascript
运行
复制
#if __STDC_VERSION__ == 201112L
  #error C11 compiler
#if __STDC_VERSION__ == 199901L
  #error C99 compiler
#else    
  #error Sucky compiler
#endif
票数 2
EN

Stack Overflow用户

发布于 2016-06-15 09:37:01

__STDC_VERSION__是用C11的值201112L定义的。C99以199901L作为值。

这将是最可靠的方法。

请注意,这个值将在未来的标准中发生变化,并且(Creding@Lundin),未来的版本号在时间上单调地增加。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37831399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档