Wil*_*mKF 27 flags gcc preprocessor g++ version
我遇到了一个gcc v3.4.4的错误,并且在我的代码中添加#ifdef来解决该版本编译器的bug.
什么是GCC编译器预处理器预定义宏来检测编译器的版本号?
Dig*_*oss 37
来自gnu cpp手册......
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
Run Code Online (Sandbox Code Playgroud)
这些宏由所有使用C预处理器的GNU编译器定义:C,C++,Objective-C和Fortran.它们的值是编译器的主要版本,次要版本和补丁级别,作为整数常量.例如,GCC 3.2.1将定义__GNUC__为3,__GNUC_MINOR__到2和__GNUC_PATCHLEVEL__1.如果直接调用预处理器,也会定义这些宏.
__GNUC_PATCHLEVEL__是GCC 3.0的新手; 它也存在于广泛使用的开发快照中,最高可达3.0(根据您拥有的快照,它自称为GCC 2.96或2.97).
如果你需要知道的是你的程序是否由GCC编译,或者是一个声称接受GNU C方言的非GCC编译器,你可以简单地测试一下__GNUC__.如果您需要编写依赖于特定版本的代码,则必须更加小心.每次增加次要版本时,补丁级别将重置为零; 每次增加主要版本(很少发生)时,重置次要版本和补丁级别.如果您希望直接在条件中使用预定义的宏,则需要像这样编写它:
/* Test for GCC > 3.2.0 */
#if __GNUC__ > 3 || \
(__GNUC__ == 3 && (__GNUC_MINOR__ > 2 || \
(__GNUC_MINOR__ == 2 && \
__GNUC_PATCHLEVEL__ > 0)))
Run Code Online (Sandbox Code Playgroud)
Gre*_*osz 18
__GNUC__,__GNUC_MINOR__和__GNUC_PATCHLEVEL__.
例如,GCC 4.0.1将执行:
#define __GNUC__ 4
#define __GNUC_MINOR__ 0
#define __GNUC_PATCHLEVEL__ 1
Run Code Online (Sandbox Code Playgroud)
当你想知道在你当前的编程环境下由GNU GCC编译器定义的预定义预处理器指令时,这是一个很好的记忆线:
gcc -E -dM - </ dev/null | less
| 归档时间: |
|
| 查看次数: |
17596 次 |
| 最近记录: |