2013-09-22 75 views
0

沒有它,我不能用它來連接到互聯網所需要的庫,但我不知道這意味着什麼:標誌「-D_POSIX_C_SOURCE = 200112L」是什麼意思?

-D_POSIX_C_SOURCE=200112L

誰能解釋?

+1

它是POSIX編譯的功能請求標誌。 [見本文](http://infohost.nmt.edu/~eweiss/222_book/222_book/0201433079/ch02lev1sec7.html)。實際上,這是您的程序所說的一種方式:「我希望POSIX具有這個級別的功能」。隨着更多功能被添加到修訂後的POSIX標準中,該值將更改以反映更改。你這樣做會告訴你實現你想要的功能的哪個「版本」。 – WhozCraig

+2

@WhozCraig對我來說這聽起來很不錯。 – us2012

回答

1

隨着時間的推移,POSIX已經看到了幾個修訂。每個新版本都更改了它支持的功能集。

該宏定義了您希望程序將與哪些功能一起構建。它影響包含文件的預處理方式,產生不同的函數原型。例如,一些libries將在編譯時檢查POSIX_C_SOURCE級別,以確定是否可以使用線程。庫可以使用這個定義來確定某些POSIX函數是否可用,或者它們是否必須提供它們自己的實現。

根據維基百科(https://en.wikipedia.org/wiki/POSIX),POSIX 2001相當於單一UNIX規範版本3.也許您在原始文章中提到的版本是第一個定義您所需的網絡功能的版本。像listen()和bind()這樣的函數在這個標準中是明確指定的,而粗略搜索在之前的POSIX版本中沒有提及它們。

如果未指定POSIX_C_SOURCE,則鏈接到的庫將對可用功能集做出一些假設,或者可能會抱怨它未定義並放棄。也許你可能鏈接了一個庫,需要這個變量才能正確設置?