gcc 这个#ifdef __GNUC__是关于什么的?

8yoxcaq7  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(226)

我在the libmagic code中找到了这些行。它们是什么意思?

#ifdef __GNUC__
__attribute__((unused))
#endif

__GNUC__是什么意思

它似乎检查了whether GCC is installed

什么是__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 a particular Visual Studio version?
最后的问题:

如何执行相同的#ifdef来检查哪个编译器正在编译我的代码?

3yhwsihp

3yhwsihp1#

在编译器中,通常会定义宏来确定它们是什么编译器、是什么版本......可移植C++代码可以使用它们来确定它是否可以使用特定的功能。
__GNUC__是什么意思?
它表明我是一个GNU编译器,你可以使用GNU扩展。1(http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html)
什么是__attribute__((unused))
此属性附加到变量,意味着该变量可能未使用。GCC不会为此变量生成unused-variable-warning。2(http://gcc.gnu.org/onlinedocs/gcc-3.1.1/gcc/Variable-Attributes.html)
__GNUC___MSC_VER之间有什么区别?
它们是两个不相关的宏。第一个说我是GNU编译器,第二个说MS编译器的版本号。然而,MS编译器不支持GNU扩展。
我如何做同样的#ifdef来检查操作系统是否使用GNU和MS Visual Studio编译我的python代码?

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

但是,这些条件是没有机会具备在一起的!

rqqzpn5f

rqqzpn5f2#

不同的编译器支持不同的特性,有时候是以不同的方式支持的。例如,GNU编译器会自动定义__GNUC____CC_ARM__ICCARM____GNUC____TASKING__都是由项目已移植到并感兴趣的某些编译器定义的。
__attribute__((unused))条目是一个GNU特定的指示符(尽管其他编译器现在也支持它),它声明它所附加的符号可能未被使用,因此编译器应该警告您这种情况。
至于如何使用这些ifdef来确定什么编译器正在构建你的代码--以你在另一个构建C的项目中阅读的相同方式来做。这些不是你的python代码的因素。

相关问题