【GCC英文手册翻译】预处理器的系统特定预定义宏(The C preprocessor:System-specific Predefined Macros)
2017-05-20 10:36
330 查看
翻译自GCC英文手册–预处理器篇The C Preprocessor:System-specific Predefined Macros
3.7.3 系统特定的预定义宏
正常情况下,C预处理器会预定义几个宏来说明正在使用的系统类型和机器类型。 很明显,在每个GCC支持的目标(机器/系统)上,他们都是不同的。 这份手册是对于所有的系统和机器的,所以不能告诉你这些宏具体的名字是什么,但你可以使用
标准C需要所有的系统特定宏成为保留命名空间 的一部分。 用两个下划线开头,或者一个下划线加一个大写字母开头的所有名字,都是为编译器和库保留的,为了能按照他们希望的那样使用。
然而,由于历史原因,系统特定宏有一些名字并没有特殊前缀。例如,在Unix系统上,一般都能找到
当有
我们会慢慢淘汰在保留命名空间外的系统特定宏。你绝不应该在新程序里面再使用它们了。并且我们也鼓励你,修正老程序里面的系统特定宏。我们也不推荐你使用在保留命名空间里面的系统特定宏。如果你想对你需要的特定功能检查,最好长期用
3.7.3 系统特定的预定义宏
正常情况下,C预处理器会预定义几个宏来说明正在使用的系统类型和机器类型。 很明显,在每个GCC支持的目标(机器/系统)上,他们都是不同的。 这份手册是对于所有的系统和机器的,所以不能告诉你这些宏具体的名字是什么,但你可以使用
cpp -dM来查看它们。 所有的系统特定预处理宏都被展开为一个常量,所以你可以用
#ifdef或者
#if来测试它们。
标准C需要所有的系统特定宏成为保留命名空间 的一部分。 用两个下划线开头,或者一个下划线加一个大写字母开头的所有名字,都是为编译器和库保留的,为了能按照他们希望的那样使用。
然而,由于历史原因,系统特定宏有一些名字并没有特殊前缀。例如,在Unix系统上,一般都能找到
unix这个宏。 对于所有这样的无特殊前缀系统特定宏,GCC提供了一种并行宏(a parallel macro),它们的特点是名字开头和结尾添加两个下划线。 还是用上面的例子,如果
unix宏被定义了,那么
__unix__宏也将被定义。 但是开头和结尾绝对不可能多于两个下划线,像
_mips的并行宏就是
__mips__。
当有
-ansi或者任何
-std这类的要求严格一致性 的参数被传给编译器时,所有在保留命名空间之外的系统特定宏都被禁止,而在保留命名空间里面的并行宏仍然被定义。
我们会慢慢淘汰在保留命名空间外的系统特定宏。你绝不应该在新程序里面再使用它们了。并且我们也鼓励你,修正老程序里面的系统特定宏。我们也不推荐你使用在保留命名空间里面的系统特定宏。如果你想对你需要的特定功能检查,最好长期用
autocof这样的工具。
译者总结
系统特定宏是为了程序跨平台的使用,一次编写,到处编译,但是这些系统特定宏的命名十分混乱,为了保证这些随意命名的宏依然能使用,GCC采取了并行宏的做法,但是GCC依然不推荐通过这些宏来达到这种跨平台编译的目的,而是通过autocof这样的工具,在源码编译时对系统进行检测然后对编译过程进行控制,而不是用宏。相关文章推荐
- MySQL - 翻译 - 5.1 Reference Manual参考手册 - 5.1.3 Server System Variables服务器系统变量 - max_heap_table_size
- Mako 模板系统文档翻译(3) 函数定义
- 【翻译】使用AIR构建的汽车诊断系统Car Diagnostic System built in Adobe AIR
- 顺序主子式的英文翻译(定义)
- 【翻译自mos文章】在rac中,使用asmcmd命令从 文件系统 move system datafile 到asm磁盘组的方法
- Android系统启动过程 (翻译自一篇英文Blog)
- [翻译]来自Apache Ant的思想:Phing PHP代码构建系统用户手册
- C++预定义宏 C++ Predefined Macros
- v4l2 API手册(规范),官方英文原版规范的,总结翻译版(原创,加入了自己的理解,未完待续)
- 一键Ghost安装系统时出现的相关英文翻译
- [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试
- PHP - Manual手册 - Function Reference函数参考 - File System Related Extensions文件系统相关扩展 - Directories目录 - Directory Functions目录函数 - sca
- 怎么让中文环境的系统用gcc编译程序时输出内容为英文
- Introduction to System.DirectoryServices.Protocols (S.DS.P) 系统目录服务协议类库——部分翻译
- Android系统启动过程 (翻译自一篇英文Blog)
- Mako 模板系统文档翻译(3) 函数定义
- PHP - Manual手册 - Function Reference函数参考 - Database Extensions数据库扩展 - Vendor Specific Database Extensions特定提供商数据库扩展 - MySQL - MyS
- 手机系统属性——SunWTK/lib下的system.config文件定义
- Unix Time Sharing System——Unix分时系统翻译
- [ExtJS5学习笔记]第六节 Extjs的类系统Class System命名规则及定义和调试