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
Dzięki !. To odpowiada na moje pytanie – user3875690