【发布时间】:2013-11-09 13:30:53
【问题描述】:
C++ 有一个__cplusplus 预处理器定义,可让您检测版本。 C有什么类似的吗?
我希望它可以跨 XCode、GCC 和 Visual Studio 版本移植。
【问题讨论】:
C++ 有一个__cplusplus 预处理器定义,可让您检测版本。 C有什么类似的吗?
我希望它可以跨 XCode、GCC 和 Visual Studio 版本移植。
【问题讨论】:
根据维基百科C99上的文章
A standard macro __STDC_VERSION__ is defined with value 199901L to indicate that C99 support is available
#if __STDC_VERSION__ >= 199901L
/*C99*/
#else
/*Not C99*/
#endif
【讨论】:
__STDC_VERSION__ 在 C90 编译器中可能没有定义,你应该先检查它是否定义,否则你会得到一个编译时错误。
__STDC_VERSION__ 在编译为 C 并指定 /std C11 或 C17 选项之一时定义。 /std:c11 扩展为 201112L,/std:c17 扩展为 201710L。
您可以测试宏__STDC_VERSION__的值(注意开头和结尾有两个下划线),对于C99兼容的平台,它应该大于或等于199901L。
C11(ISO/IEC 9899:201x) §6.10.8.1 强制宏
__STDC_VERSION__整数常量201ymmL。
在脚注中:
此宏未在 ISO/IEC 9899:1990 中指定,在中指定为
199409LISO/IEC 9899/AMD1:1995 和 ISO/IEC 9899:1999 中的199901L。这样做的目的是 保持long int类型的整数常量,随着本国际标准的每次修订而增加。
【讨论】: