Cry*_*pto 1 c linux macros c99 header-files
我正在阅读 linux功能测试宏页面,并在注释部分指出:
<features.h> 是 Linux/glibc 特定的头文件。其他系统也有类似的文件,但通常具有不同的名称。该头文件会根据需要自动包含在其他头文件中:无需显式包含它即可使用功能测试宏。
我知道其他系统不会具有与 features.h 相同的文件名,因此您不应直接包含它。但是,如果不包含头文件,如何知道是否可以使用功能测试宏?
glibc 保证#define记录的功能选择宏(_POSIX_C_SOURCE、_XOPEN_SOURCE、_GNU_SOURCE等)将被遵守,只要它们在首次包含任何公共 C 库头文件之前生效。例如
/* file header comment */
#define _XOPEN_SOURCE 700 // first non-comment line of the file
#include <unistd.h> // first #include in the file
// ... more code here ...
Run Code Online (Sandbox Code Playgroud)
保证声明unistd.h属于 POSIX.1-2008 一部分的内容,包括 XSI 扩展。
此保证的实现涉及features.h,但features.h不是公共 C 库头文件。直接包含features.h不是您应该需要做的事情,并且我们(glibc 开发者)不承诺该标头将来会继续存在。(例如,未来的版本可能会将其合并到 中bits/libc-header-start.h。)