5

没有它,我无法使用连接到互联网所需的库,但我不知道这意味着什么:

-D_POSIX_C_SOURCE=200112L

谁能解释一下?

4

1 回答 1

2

随着时间的推移,POSIX 已经进行了多次修订。每个新版本都更改了它支持的功能集。

这个宏定义了你希望你的程序将使用的一组特性。它会影响包含文件的预处理方式,从而产生不同的函数原型。例如,一些库会在编译时检查 POSIX_C_SOURCE 级别以确定是否可以使用线程。库可以使用此定义来确定某些 POSIX 函数是否可用,或者它们是否必须提供自己的实现。

根据维基百科 ( https://en.wikipedia.org/wiki/POSIX),POSIX 2001 等同于单一 UNIX 规范版本 3。也许您在原始帖子中提到的版本是第一个定义您需要的网络功能的版本。此标准中明确指定了诸如 listen() 和 bind() 之类的函数,而粗略的搜索并未发现在以前的 POSIX 版本中提及它们。

如果未指定 POSIX_C_SOURCE,则您链接到的库将对可用功能集做出一些假设,或者可能会抱怨它未定义并放弃。也许您可能在需要正确设置此变量的库中链接?

于 2016-03-28T14:52:26.690 回答