且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《UNIX环境高级编程(第3版)》——2.7 功能测试宏

更新时间:2021-10-24 02:38:14

本节书摘来自异步社区《UNIX环境高级编程(第3版)》一书中的第2章,第2.7节,作者:【美】W. Richard Stevens , Stephen A.Rago著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.7 功能测试宏

如前所述,头文件定义了很多POSIX.1和XSI符号。但是除了POSIX.1和XSI定义外,大多数实现在这些头文件中也加入了它们自己的定义。如果在编译一个程序时,希望它只与POSIX的定义相关,而不与任何实现定义的常量冲突,那么就需要定义常量_POSIX_C_SOURCE。一旦定义了_POSIX_C_ SOURCE,所有POSIX.1头文件都使用此常量来排除任何实现专有的定义。

POSIX.1标准的早期版本定义了_POSIX_SOURCE常量。在POSIX.1的2001版中,它被替换为_POSIX_C_SOURCE。

常量_POSIX_C_SOURCE及_XOPEN_SOURCE被称为功能测试宏(feature test macro)。所有功能测试宏都以下划线开始。当要使用它们时,通常在cc命令行中以下列方式定义:

cc -D_POSIX_C_SOURCE=200809L file.c
这使得C程序在包括任何头文件之前,定义了功能测试宏。如果我们仅想使用POSIX.1定义,那么也可将源文件的第一行设置为:

#define_POSIX_C_SOURCE 200809L
为使SUSv4的XSI选项可由应用程序使用,需将常量_XOPEN_SOURCE定义为700。除了让XSI选项可用以外,就POSIX.1的功能而言,这与将_POSIX_C_SOURCE定义为200809L的作用相同。

SUS将c99实用程序定义为C编译环境的接口。随之,就可以用如下方式编译文件:

c99 -D_XOPEN_SOURCE=700 file.c –o file
可以使用-std=c99选项在gcc的C编译器中启用1999 ISO C扩展,如下所示:

gcc -D_XOPEN_SOURCE=700 -std=c99 file.c -o file