2015-03-26 11 views
6

ja jechałem przez źródło niektórych standardowych nagłówków zawartych z gcc (w /usr/include/c++/) i stwierdzili, że następujące u góry każdego nagłówka:Co to jest _GLIBCXX_VISIBILITY?

namespace std _GLIBCXX_VISIBILITY(default) 

co dokładnie jest _GLIBCXX_VISIBILITY(default)?

Odpowiedz

11

To makro preprocesora. I jest zdefiniowany jako:

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

Więc jeśli _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY jest prawdziwe wtedy w twoim przypadku to poszerzy się:

__attribute__ ((__visibility__ ("default"))) 

else if _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY jest fałszywa to zrobi nic.

Atrybut __visibility__ służy do definiowania widoczności symboli w pliku DSO. Używanie "ukrytego" zamiast "domyślnego" może być używane do ukrywania symboli przed rzeczami spoza OSD.

Na przykład:

__attribute__ ((__visibility__("default"))) void foo(); 
__attribute__ ((__visibility__("hidden"))) void bar(); 

Funkcja foo() byłby użyteczny spoza DSO natomiast bar() jest w zasadzie prywatnego i może być stosowany tylko wewnątrz DSO.

można przeczytać nieco więcej o atrybucie tutaj __visibility__: https://gcc.gnu.org/wiki/Visibility

+0

Dzięki !. To odpowiada na moje pytanie – user3875690