在C11标准中,编译器应该提供一些宏来测试可选的特性。我在什么标题中找到它们?
例如,__STDC_NO_VLA__在哪里?
与GCC,即,如果我试图找到__STDC_NO_COMPLEX__进入complex.h,我找不到它在那里.
发布于 2014-04-07 13:47:07
没有在任何头中定义它们,编译器将自己定义它们。
您可以转储所有的预处理器定义。例如,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或
#ifndef __STDC_NO_VLA__
// code using variable length arrays
#else
// fallback code for when they are not supported
#endif发布于 2014-04-07 13:48:50
如果定义了STDC_NO_COMPLEX,则表示不存在复杂的.h
STDC_NO_COMPLEX由编译器定义,而不是由头文件定义。
来源:http://en.cppreference.com/w/c/numeric/complex
https://stackoverflow.com/questions/22914206
复制相似问题