我正在查看gcc附带的一些标准头文件的源代码(在/usr/include/c++/中),并在每个头文件的顶部找到以下内容:

namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_VISIBILITY(default)到底是什么?

最佳答案

这是一个预处理器宏。并定义为:

#if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY
#define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V)))
#else
#define _GLIBCXX_VISIBILITY(V)
#endif

因此,如果_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY为true,则在您的情况下它将扩展为:
__attribute__ (( __visibility__ ("default")))

否则,如果_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY为false,则将不执行任何操作。
__visibility__属性用于定义DSO文件中符号的可见性。使用“隐藏”而不是“默认”可用于隐藏DSO外部对象的符号。

例如:
__attribute__ ((__visibility__("default"))) void foo();
__attribute__ ((__visibility__("hidden"))) void bar();
foo()函数可在DSO外部使用,而bar()本质上是私有(private)的,只能在DSO内部使用。

您可以在这里阅读更多有关__visibility__属性的信息:https://gcc.gnu.org/wiki/Visibility

关于c++ - 什么是_GLIBCXX_VISIBILITY?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29270208/

10-11 15:38