这是什么#ifdef __GNUC__?

时间:2013-11-11 14:36:51

标签: c++ python visual-studio gnu

我在libmagic代码中找到了这些行,(sourceforge.net/projects/libmagic/files/latest/download)。他们的意思是什么?什么是python等价物?

#ifdef __GNUC__
__attribute__((unused))
#endif 

__GNUC__的含义是什么? 所以它似乎检查是否安装了GCC编译器,What means __CC_ARM, __ICCARM__, __GNUC__, __TASKING__

什么是__attribute__((unused)) 这里有一段代码片段,但没有解释:How do I best silence a warning about unused variables?

__GNUC___MSC_VER 之间的区别是什么? 关于_MSC_VER有一些解释,但这是什么呢? How to Detect if I'm Compiling Code With Visual Studio 2008?

最后一个问题:我怎样才能检查操作系统是否正在使用GNU和MS可视化工作室编译我的python代码?

2 个答案:

答案 0 :(得分:13)

在编译器中通常定义宏来确定它们是什么编译器,版本是什么,...便携式C ++代码可以使用它们来发现它可以使用特定功能。

  

__GNUC__是什么意思?

它表明我不是GNU编译器,你可以使用GNU扩展。 [1]

  

什么是__attribute__((unused))

此属性附加到变量,表示该变量可能未使用。 GCC不会为此变量生成未使用的变量警告。 [2]

  

__GNUC___MSC_VER之间的区别是什么?

它们是两个不相关的宏。第一个说我是GNU编译器,第二个说MS编译器的版本号。但是,MS编译器不支持GNU扩展。

  

如何使用GNU和MS可视化工作室检查操作系统是否正在编译我的python代码#ifdef

#if (defined(__GNU__) && defined(_MSC_VER))
   // ...
#endif

答案 1 :(得分:2)

不同的编译器支持不同的功能,有时以不同的方式。您正在找到一系列#ifdef块,以根据构建代码的编译器启用支持;例如,GNU编译器会自动定义__GNUC____CC_ARM__ICCARM____GNUC____TASKING__都是由项目移植到并感兴趣的某些编译器定义的。

__attribute__((unused))条目是一个特定于GNU的指示符(尽管其他编译器现在也可能支持这个),表明它所附加的符号可能未被使用,因此编译器应警告您该条件。

关于如何使用这些ifdef来确定构建代码的编译器 - 以与在另一个用于构建C的项目中读取相同的方式执行它。这些不是python代码的因素。