qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

UNIX标准化及实现之功能测试宏

在头文件中定义了很多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命令行中以下列方式定义:
  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__功能测试宏。

posted on 2014-11-04 10:16 顺其自然EVO 阅读(233) 评论(0)  编辑  收藏 所属分类: 测试学习专栏


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
<2014年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜