c - _POSIX_ 与 _POSIX_SOURCE 与 _POSIX_C_SOURCE

标签 c posix

(将其与 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/

相关文章:

c - 隐式声明静态的问题(编译自定义的 mupdf 库)

c - c中的函数描述符

c - 在 C 中使用 realloc 函数进行内存分配的问题

服务器应用程序中的 C 内存管理

c - 如何在 Linux 上使用 C 在执行期间切换用户

c++ - 如果 send() 返回 x 个字节,recv() 是否在一次调用中获得相同数量的字节?

c - 从C读取Excel文件

c - 堆栈上的运行时内存分配

c - atoi 是标准函数。但 itoa 不是。为什么?

c++ - 关于使用多线程定期强制检查软件更新的问题