《UNIX环境高级编程(第3版)》——2.7 功能测试宏-阿里云开发者社区

开发者社区> 异步社区> 正文

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

简介: 如前所述,头文件定义了很多POSIX.1和XSI符号。但是除了POSIX.1和XSI定义外,大多数实现在这些头文件中也加入了它们自己的定义。如果在编译一个程序时,希望它只与POSIX的定义相关,而不与任何实现定义的常量冲突,那么就需要定义常量_POSIX_C_SOURCE。
+关注继续查看

本节书摘来自异步社区《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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
UNIX环境高级编程---标准I/O库
前言:我想大家学习C语言接触过的第一个函数应该是printf,但是我们真正理解它了吗?最近看Linux以及网络编程这块,我觉得I/O这块很难理解。以前从来没认识到Unix I/O和C标准库I/O函数压根不是一码事。
826 0
UNIX环境高级编程笔记之线程
  本章涉及到线程的一些基本知识点,讨论了现有的创建线程和销毁线程的POSIX.1原语,此外,重点介绍了线程同步问题,讨论了三种基本的同步机制:互斥量、读写锁、条件变量。
551 0
为你的CSDN博客添加CNZZ流量统计功能
一、流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计。 1、简介 统计独立的访问者数量(独立用户、独立访客); 可以统计独立的IP地址数量; 可以统计页面被刷新的数量。
2739 0
《UNIX环境高级编程(第3版)》——2.6 选项
选项包括了图2-5中第3列的符号以及图2-19和图2-18中的符号。如果符号常量未定义,则必须使用sysconf、pathconf或fpathconf来判断是否支持该选项。在这种情况下,这些函数的name参数前缀_POSIX必须替换为_SC或_PC。
1340 0
TensorFlow新功能:TensorFlow Probability概率编程工具箱介绍
2018年,tensorflow开发者峰会上,tensorflow管理人员发布了:TensorFlow Probability——一种概率编程工具箱,用于机器学习研究人员和从业人员快速可靠地构建利用最先进硬件的复杂模型。快来学习一下吧~
3340 0
UNIX环境高级编程笔记之标准I/O库
一、总结   文件I/O一章讲了不带缓冲的I/O,本章讲的是带缓冲的I/O。不带缓冲针对的是内核的系统调用,而带缓冲针对的是用户空间的标准库函数,是基于带缓冲的I/O实现的。不带缓冲的I/O通过文件描述符的方式来引用一个文件,而带缓冲的I/O则通过文件流(stream)的方式来引用文件。
675 0
Java高级之虚拟机加载机制
Jvm要加载的是二进制流,可以是.class文件形式,也可以是其他形式,按照它加载的标准来设计就不会有太大问题。
24271 0
《Objective-C高级编程:iOS与OS X多线程和内存管理》读后感
拿到这本书的第一感觉是非常薄,但是内容就如同序里面所说,这不是一本面向初学者的书,比较有深度,对C/C++完全不熟悉的话很多东西会看不明白。 虽然此书在技术点上只谈到了ARC、Blocks和GCD,但是如果把这三部分的内容深入理解了,其实也等于将开发中大部分的问题都解决了,ARC面对的是内存管理的问题,相信每一个iOS开发者都曾面临过,对大多数人来说,只要记好内存管理的相关规则,就能避免内存管理的问题,如果不满足于只知其表象,想深入理解ARC的工作机制的话,这部分还是很值得一读的。
876 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载