在头文件中定义了很多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__功能测试宏。

linux 功能测试宏 POSIX_C_SOURCE相关推荐

  1. linux c 宏定义 #define _GNU_SOURCE 含义

    今天我必须要使用 basename 函数,使用man手册查询了一下这个函数 man 3 basename 发现一个奇怪的信息 名称 basename,dirname-分析路径名组件 简介 #inclu ...

  2. Linux 内核宏 time_after解析

    同学们留言回复答案看看 可能很多老鸟对这样的Linux 内核宏已经见惯不怪了,但是作为新手的Linux内核开发者,我觉得非常有必要了解其中的原理和作用. jiffies 这个想必大家已经非常熟悉,ji ...

  3. PCL “(”:“::”右边的非法标记 和 E2512 功能测试宏的参数必须是简单标识符

    PCL "(":"::"右边的非法标记 解决方法: 项目属性   --> C/C++ --> 预处理器 --> 预处理器定义 (此处添加预定义 ...

  4. 关于UNIX功能测试宏

    UNIX的功能测试宏,在头文件中定义了很多POSIX.1和XPG3的符号.但是除了POSIX.1和XPG3定义外,大多数实现在这些头文件中也加上了他们自己的定义.如果在编译一个程序时,希望它只是用PO ...

  5. Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符

    Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符 问题描述: Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单 ...

  6. linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路

    122Linux系统和Shell命令行简介,走上数据分析之路 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://git ...

  7. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分

    今天在看Linux系统编程这本书的代码的时候看到了__GNUC__,不太清楚这个宏所以去查了一下,以此记录.GNU C预定义了一系列的宏,这些宏都是以双下划线开始的,这里只讲一下__GNUC__  _ ...

  8. linux 内核宏container_of剖析

    1.前面说的 我在好几年前读linux 驱动代码的时候看到这个宏,百度了好久,知道怎么用了,但是对实现过程和原理还是一知半解. container_of宏 在linux内核代码里面使用次数非常非常多, ...

  9. Linux如何查看信号宏定义,转  LINUX 调试宏定义

    在include\linux下新建一个debug头文件debug_if.h,鉴于KERN_WARNING之类的宏 在include\linux\kernel.h,因此将debug_if.h包含到ker ...

最新文章

  1. 猫猫学iOS 之第一次打开Xcode_git配置,git简单学习
  2. 3D机器人视觉在仓储物流和工业自动化领域的应用 | AI ProCon 2019
  3. 【原创】sharepoint webpart COPY部署的办法
  4. 常用口语绝佳句型100句(2)
  5. 剑网服务器维护,12月31日服务器例行维护公告
  6. IntelliJ IDEA下git版本回退,版本还原
  7. 【渝粤教育】国家开放大学2018年春季 8639-22T食品营养与健康 参考试题
  8. 好奇怪呀后面加什么标点_沙发位后面是窗户有什么好的方案?
  9. 网络便签与网络通讯录
  10. 我是如何考上武汉大学在职研究生的
  11. 解决eeglab无法读取.mat文件(读取mat文件报错cannot read .mat file,eeglab error in function pop_editset()at line 445)
  12. 06_因果图法、判定表法、场景法
  13. msp430单片机c语言开发,MSP430单片机开发总结
  14. 2021年茶艺师(中级)考试技巧及茶艺师(中级)作业考试题库
  15. matlab利用dft分析模拟信号频谱,利用DFT分析模拟信号频谱
  16. android模拟器不玩游戏,安卓模拟器哪个玩游戏最流畅?
  17. vue笔记:父子传值奥利给!
  18. 【年度榜单】2020大数据产业创新服务产品丨数据猿·金猿榜
  19. 任正非:星光不问赶路人
  20. python画地图经纬度_【python】使用python按照一定格式批量输出,地图热力图经纬度格式生成器...

热门文章

  1. 互联网协议 — LISP 位置/身份分离协议
  2. 宏定义中的#、##操作符和... 、 _ _VA_ARGS_ _解析
  3. 系列TCP/IP协议-广播与多播(010)
  4. Alpine Linux 3.9.1 发布,面向安全的轻量级 Linux 发行版
  5. 信号编程之sigaction函数和sigqueue函数
  6. 不用图片的DIV圆角(兼容各浏览器)
  7. linux sheel script demo
  8. Samba常用配置及GUEST访问
  9. 少侠请重新来过 - Vue学习笔记(八) - Vuex
  10. 02-NLP-01-jieba中文处理