UNIX标准化及实现之功能测试宏
2013-12-30 09:59
204 查看
在头文件中定义了很多POSIX.1和XSI的符号。但是除了POSIX.1和XSI的定义之外,大多数实现在这些头文件中也加上了它们自己的定义。如果在编译一个程序时,希望它只使用POSIX定义而不使用任何实现自己定义的限制,那么就需要定义常量_POSIX_C_SOURCE。所有POSIX.1头文件中都使用此常量。当定义该常量时,就能排除任何实现专有的定义。
注:POSIX.1标准的以前版本都定义了_POSIX_SOURCE常量。在POSIX.1的2001版中,它被替换为_POSIX_C_SOURCE。
常量_POSIX_C_SOURCE及_XOPEN_SOURCE被称为功能测试宏(feature test macro)。所有功能测试宏都以下划线开始。当要使用它们时,通常在cc命令行中以下列方式定义:
这使得C程序包括任何头文件之前,定义了功能测试宏。如果我们仅想使用POSIX.1定义,那么也可将源文件的第一行设置为:
为使Single UNIX Specification v3的功能可由应用程序使用,需将常量_XOPEN_SOURCE定义为600。
Single UNIX Specification将c99实用程序定义为C编译环境的接口。随之,就可以用如下方式编译文件:
为了在gcc C编译器中启用1999 ISO C扩展,可以使用-std = c99选项,如下所示:
另一个功能测试宏是:__STDC__,它由符合ISO C标准的C编译器自动定义。这样就允许我们编写ISO C编译器和非ISO C编译器都能编译的程序。例如,为了利用ISO C原型功能(如果支持),一个头文件可能包含:
虽然,当今的大多数C编译器都支持ISO C标准,但在很多头文件中仍旧使用__STDC__功能测试宏。
本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。
注:POSIX.1标准的以前版本都定义了_POSIX_SOURCE常量。在POSIX.1的2001版中,它被替换为_POSIX_C_SOURCE。
常量_POSIX_C_SOURCE及_XOPEN_SOURCE被称为功能测试宏(feature test macro)。所有功能测试宏都以下划线开始。当要使用它们时,通常在cc命令行中以下列方式定义:
cc -D_POSIX_C_SOURCE=200112 file.c
这使得C程序包括任何头文件之前,定义了功能测试宏。如果我们仅想使用POSIX.1定义,那么也可将源文件的第一行设置为:
#define _POSIX_C_SOURCE 200112
为使Single UNIX Specification v3的功能可由应用程序使用,需将常量_XOPEN_SOURCE定义为600。
Single UNIX Specification将c99实用程序定义为C编译环境的接口。随之,就可以用如下方式编译文件:
c99 -D_XOPEN_SOURCE=600 file.c -o file
为了在gcc C编译器中启用1999 ISO C扩展,可以使用-std = c99选项,如下所示:
gcc -D_XOPEN_SOURCE=600 -std=c99 file.c -o file
另一个功能测试宏是:__STDC__,它由符合ISO C标准的C编译器自动定义。这样就允许我们编写ISO C编译器和非ISO C编译器都能编译的程序。例如,为了利用ISO C原型功能(如果支持),一个头文件可能包含:
#ifdef __STDC__ void *myfunc( const char *, int ); #else void *myfunc(); #endif
虽然,当今的大多数C编译器都支持ISO C标准,但在很多头文件中仍旧使用__STDC__功能测试宏。
本篇博文内容摘自《UNIX环境高级编程》(第二版),仅作个人学习记录所用。关于本书可参考:http://www.apuebook.com/。
相关文章推荐
- 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换
- js实现input输入框只能输入数字的功能(完美测试通过)
- APUE-第二章学习-UNIX标准化及实现-习题
- qtp 测试webservice接口,实现功能测试(步骤很详细)
- UNIX环境高级编程(4):UNIX标准化及实现(2)
- unittest实现HTTP接口功能测试
- 用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通
- js实现input输入框只能输入数字的功能(完美测试通过)
- Webdriver+Testng实现测试用例失败自动截图功能
- jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
- [UNIX编程笔记] 【APUE-4】 UNIX标准化及实现与sysconf、fpathconf、pathconf函数
- UNIX标准化及实现之标准之间的冲突
- 自己实现的C++智能指针的功能代码和测试用例
- D-Bus入门(四)——QTDBUS代码,实现ofono代码下的python测试文件activite-context的功能
- UNIX_C 环境下实现输入一个字符,不用回车直接输入功能(类型windows下_getch(void)函数)
- 模块管理常规功能自定义系统的设计与实现(56--开源开发测试版发布 )
- 利用shell + python + expect实现类似xshell功能(测试环境:ubuntu)
- APUE读书笔记-02UNIX标准和实现-07特征测试宏
- js实现input输入框只能输入数字的功能(完美测试通过)
- Linux的那些事儿(4)----Linux环境下编程之Unix标准化及实现