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__功能测试宏。

最新内容请见作者的GitHub页:http://qaseven.github.io/
目录
打赏
0
0
0
0
192
分享
相关文章
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
QT --- VS2017+Qt5.12 编译报错【E2512 功能测试宏的参数必须是简单标识符 】的解决方法
650 0
《手把手教你》系列技巧篇(七)-java+ selenium自动化测试-宏哥带你全方位吊打Chrome启动过程(详细教程)
【2月更文挑战第16天】本文介绍了如何通过查看源码理解Selenium启动Chrome浏览器的过程。首先,展示了启动Chrome的Java代码,包括设置系统属性、创建WebDriver实例、最大化窗口、设置隐性等待、打开网站、获取页面标题以及关闭浏览器。文章还讲解了包(package)、import导入、setProperty设置系统属性、WebDriver接口、driver实例、manage方法、get方法加载网页以及quit方法退出浏览器的基本概念和作用。适合没有Java基础的读者了解Selenium与Java的交互方式。
132 3
Study | 激光雷达性能如何统一量化?标准化测试最新研究发布
Study | 激光雷达性能如何统一量化?标准化测试最新研究发布
170 0
E2512 功能测试宏的参数必须是简单标识符
E2512 功能测试宏的参数必须是简单标识符
687 0
E2512 功能测试宏的参数必须是简单标识符
《Linux/UNIX系统编程手册(上、下册)》——1.3 标准化
20世纪80年代末,可用的UNIX实现层出不穷,由此也带来了种种弊端。有些UNIX实现基于BSD,而另一些则基于System V,还有一些则是对两大“流派”“兼容并蓄”。更有甚者,每个厂商都在自己的UNIX实现中添加了额外特性。
2560 0
《UNIX环境高级编程(第3版)》——2.7 功能测试宏
如前所述,头文件定义了很多POSIX.1和XSI符号。但是除了POSIX.1和XSI定义外,大多数实现在这些头文件中也加入了它们自己的定义。如果在编译一个程序时,希望它只与POSIX的定义相关,而不与任何实现定义的常量冲突,那么就需要定义常量_POSIX_C_SOURCE。
1631 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等