C11 标准中写道,编译器应该提供一些宏来测试可选功能的存在。我可以在哪些标题中找到它们?
例如位于哪里__STDC_NO_VLA__
?
对于 GCC,即,如果我尝试找到__STDC_NO_COMPLEX__
into complex.h
我在那里没找到...
它们没有在任何标头中定义,编译器将自行定义它们。
您可以转储所有预处理器定义。例如对于 gcc 写:
gcc -dM -E - < /dev/null
以我为例:
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__
它的存在意味着编译器不支持可变长度数组。你可以写:
#ifdef __STDC_NO_VLA__
#error Your compiler does not support VLAs! Please use a supported compiler.
#endif
Or
#ifndef __STDC_NO_VLA__
// code using variable length arrays
#else
// fallback code for when they are not supported
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)