關於PHPAPI ZEND_API TSRM_API宏的定義

在PHP源碼中,咱們能夠見到諸如PHPAPI ZEND_API TSRM_API等xxx_API(固然還有其餘格式的)這樣的宏函數

關於它們的定義都是相似於spa

#if defined(__GNUC__) && __GNUC__ >= 4
# define ZEND_API __attribute__ ((visibility("default")))
#else
# define ZEND_API
#endif

 

1、預約義__GNUC__宏code

    1 __GNUC__ 是gcc編譯器編譯代碼時預約義的一個宏。須要針對gcc編寫代碼時, 能夠使用該宏進行條件編譯。blog

    2 __GNUC__ 的值表示gcc的版本。須要針對gcc特定版本編寫代碼時,也能夠使用該宏進行條件編譯。編譯器

    3 __GNUC__ 的類型是「int」,該宏被擴展後, 獲得的是整數字面值。能夠經過僅預處理,查看宏擴展後的文本。源碼

因此咱們知道ZEND_API定義爲:it

若是編譯器使用的是gcc且GNUC的版本大於等於4,則定義ZEND_API爲 __attribute__ ((visibility("default")))編譯

那__attribute__究竟是幹嗎的,有什麼做用呢?class

查閱關於C的相關資料得出結論:gcc

__attribute__ ((visibility("default")))定義的函數都是可見的

 

詳細的解釋能夠搜索相關內容

相關文章
相關標籤/搜索