簡體   English   中英

BSD插座header

[英]BSD socket header

具有“__P”的socket.h BSP header

int bind __P((int, const struct sockaddr *, socklen_t))

你能告訴我這里的“__P”是什么意思嗎? 太感謝了!

這是一個可移植性黑客。 K&R C(C之前的版本由ANSI和ISO標准化)沒有聲明帶有類型的函數,並在括號中命名為arguments。 因此,這個聲明需要在 K&R C 上是這樣的:

int bind();

這在標准 C 上:

int bind(int, const struct sockaddr *, socklen_t);

__P宏旨在彌補這些差異,並允許編譯器根據指定標准 C 的__STDC__宏的存在生成適當的原型。

請注意,C 在 1989 年由 ANSI 標准化,在 1990 年由 ISO 標准化,並且從那時起經歷了多次修訂,最明顯的是在 1999 年和 2011 年。幾乎不可能有人仍在現代系統上使用 K&R C,因為許多架構,它們在相關操作系統中的支持僅出現在支持標准 C 的編譯器中。 此外,大多數人正在使用在過去 30 年中升級或構建的系統。

然而,一些非常古老的軟件可能是用 K&R C 編寫的,因此,這種技術允許這樣的代碼工作。 但是,此類代碼的生命周期必然是有限的,因為最新版本的 GCC 和 clang 不再支持 K&R C,因此尋找舊編譯器可能會很棘手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM