23

我在代码中找到libmagic这些行。他们的意思是什么?

#ifdef __GNUC__
__attribute__((unused))
#endif 

是什么__GNUC__意思?
似乎检查是否安装了 GCC

是什么__attribute__((unused))
这里有一个代码片段,但没有解释:如何最好地消除有关未使用变量的警告?

__GNUC__和 和有什么不一样_MSC_VER
有一些解释_MSC_VER,但它到底是关于什么的?
如何检测我是否正在使用特定的 Visual Studio 版本编译代码?

最后一个问题:
我怎样才能#ifdef检查哪个编译器正在编译我的代码?

4

2 回答 2

23

在编译器中定义宏来确定它们是什么编译器、版本是什么是很常见的……可移植的 C++ 代码可以使用它们来确定它是否可以使用特定功能。

是什么__GNUC__意思?

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

 

是什么__attribute__((unused))

附加到变量的此属性意味着该变量可能未被使用。GCC 不会为此变量生成未使用的变量警告。[2]

 

__GNUC__和 和有什么不一样_MSC_VER

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

 

我怎样才能#ifdef检查操作系统是否正在使用 GNU 和 MS Visual Studio 编译我的 python 代码?

#if (defined(__GNU__) && defined(_MSC_VER))
   // ...
#endif
于 2013-11-11T15:07:16.497 回答
2

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

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

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

于 2013-11-11T14:42:10.563 回答