(将其与 this question 分开)
以下 3 个宏出现在许多 C 源文件中,它们试图检测/依赖 POSIX 的可用性。功能:
_POSIX_SOURCE
_POSIX_C_SOURCE
_POSIX_
(和_POSIX
?)
在链接到的问题中,解释了我们应该将 _POSIX_C_SOURCE
设置为我们想要依赖的 POSIX 版本(尽管设置它并不能保证该功能实际上< em>可用 - 这取决于编译器/操作系统)。另外,虽然我可以将其设置为用户,但不清楚其他人何时自行设置它(例如编译器/构建系统)。对于另外两个,我不知道什么时候应该设置它们,也不知道别人什么时候设置它们。
那么,这三个宏的含义有什么区别呢?他们什么时候会为我安排好?如果有的话,为什么/什么时候我应该选择将其中一个设置为其他?
最佳答案
非常部分的答案(感谢@SomeProgrammerDude):
POSIX reference告诉我们:
The POSIX.1-1990 standard specified a macro called _POSIX_SOURCE. This has been superseded by _POSIX_C_SOURCE.
实际上,GNU C 库手册 tells以我们为例:
The state of _POSIX_SOURCE is irrelevant if you define the macro _POSIX_C_SOURCE to a positive integer.
对于其他 C 标准库实现来说,它可能应该是相同的。因此,永远不要自己使用 _POSIX_SOURCE
,仅使用 _POSIX_C_SOURCE
(除非您使用的是操作系统和库至少在过去 20 年没有更新的旧平台)。
_POSIX_
和 _POSIX
是 Microsoft-Visual-C(++) 特定的宏。我猜测您定义它是为了让 MSVC 公开 POSIX/类似 POSIX 的功能。根据this non-authoritative thread在 MinGW 邮件列表中,从 MSVC2013 开始,MSVC 不再使用 _POSIX_
(和 _POSIX
?)。
关于c - _POSIX_ 与 _POSIX_SOURCE 与 _POSIX_C_SOURCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54626307/