首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C11可选特性宏在哪里?

C11可选特性宏在哪里?
EN

Stack Overflow用户
提问于 2014-04-07 13:40:22
回答 2查看 1.1K关注 0票数 4

在C11标准中,编译器应该提供一些宏来测试可选的特性。我在什么标题中找到它们?

例如,__STDC_NO_VLA__在哪里?

与GCC,即,如果我试图找到__STDC_NO_COMPLEX__进入complex.h,我找不到它在那里.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-07 13:47:07

没有在任何头中定义它们,编译器将自己定义它们。

您可以转储所有的预处理器定义。例如,gcc写道:

代码语言:javascript
复制
gcc -dM -E - < /dev/null

例如,对我来说:

代码语言:javascript
复制
bob@bob-fedora:~/trunk/software$ gcc --version
gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

bob@bob-fedora:~/trunk/software$ gcc -std=gnu11 -dM -E - < /dev/null | grep STDC
#define __STDC_HOSTED__ 1
#define __STDC_UTF_16__ 1
#define __STDC_VERSION__ 201112L
#define __GNUC_STDC_INLINE__ 1
#define __STDC_UTF_32__ 1
#define __STDC__ 1

在您给出的示例中,__STDC_NO_VLA__的存在意味着编译器不支持可变长度数组。你可以写:

代码语言:javascript
复制
#ifdef __STDC_NO_VLA__
#error Your compiler does not support VLAs! Please use a supported compiler.
#endif

代码语言:javascript
复制
#ifndef __STDC_NO_VLA__
// code using variable length arrays
#else
// fallback code for when they are not supported
#endif
票数 7
EN

Stack Overflow用户

发布于 2014-04-07 13:48:50

如果定义了STDC_NO_COMPLEX,则表示不存在复杂的.h

STDC_NO_COMPLEX由编译器定义,而不是由头文件定义。

来源:http://en.cppreference.com/w/c/numeric/complex

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

https://stackoverflow.com/questions/22914206

复制
相关文章

相似问题

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