《C语言编程魔法书:基于C11标准》——1.4 关于GNU规范的语法扩展
本节书摘来自华章计算机《C语言编程魔法书:基于C11标准》一书中的第1章,第1.4节,作者 陈轶,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.4 关于GNU规范的语法扩展GNU是一款能用于构建类Unix操作系统的计算机软件合集,由自由软件之父Richard Stallman开创,于1983年9月27日对外发布。GNU完全由自由软件(free software)构成。GNU语法扩展源自于GCC编译器,在1987年发布1.0版本,称为GNU C Compiler。随后,GCC编译器前端支持了C++、Objective-C/C++、Fortran、Ada、Java以及最近跃升的Go等编程语言,因此现在GCC被称为GNU Compiler Collection。由于在20世纪90年代,GNU C编译器就对C90标准做了相当多的语法扩展,包括复合字面量、匿名结构体和数组、可指定的初始化器等,这些语法扩展被广泛使用,尤其是大量用于Linux内核代码中,因此C99标准将这些语法特性全都列入标准之中。
正因为GCC本身是开源自由软件,因此很多商用编译器也基于GCC进行扩展。像ARM的RVCT(RealView Compiler Toolkit)本身就支持GNU扩展。还有不少开发平台本身就直接使用GCC编译工具。由于有不少大公司顶级开发人员的参与,因此GCC编译器的目标代码优化能力相当高,而且还支持许多不同的处理器。所以,GCC当前被广泛使用并博得开发者的好评。像Linux操作系统基本默认使用GCC作为默认编译器,包括Android的NDK开发工具一开始也是如此。
然而,由于GCC基于比较严格的GPL许可证,许多大型商业开发商对它望而却步。该许可证允许使用者免费使用软件,但是要求不能随意对它进行篡改并重新发布。如果开发者对它进行篡改,然后发布自己修改之后的软件,那么必须要把自己修改的那部分也开源出来。因此,在2003年诞生了一个LLVM开源项目,基于更为宽松的BSD许可证,其编译器称为Clang。BSD许可证允许开发者随意对软件进行修改并重新发布,甚至可以将修改过的版本作为自主版权,因而这个许可证深受大公司的欢迎。现在Apple对LLVM项目的投入非常大。macOS上的开发工具Xocde从4.0版本起就开始使用Clang编译工具链,随后Apple将自己改写的Clang编译器称为Apple LLVM。当前最新的Xcode 8所使用的Apple LLVM版本为8.x。而当前Android NDK也支持了Clang编译器工具链。Clang编译器并非基于GCC,它是从头开始写的。但是它的目标是尽量与GCC编译器兼容,所以Clang编译器包含大部分GNU语法扩展,除此之外还含有它自己特有的C语言扩展。当然也有一些特性是GCC含有而Clang不具备的,不过这些特性一般很少使用。
我们现在可以看到GNU语法扩展适用性十分广泛。如果读者当前在做Linux/Unix或Windows上的C语言编程开发,或者是在开发macOS/iOS应用,又或者是在开发Android应用,那么完全可以毫无顾忌地使用GNU语法扩展。本书最后几个章节会分别介绍GCC编译器特定的语法扩展以及Clang编译器特定的语法扩展。由于Clang编译器已经包含了大部分GNU语法扩展,因此在介绍GCC语法扩展的时候,如果当前特性Clang不支持,则会指明。
相关文章
- 计算机等级考试二级C语言程序设计专项训练题——程序设计题(五)
- 计算机等级考试二级C语言模拟试卷(六)
- 关于C语言中不同类型数据进行计算 有符号和无符号数进行计算
- C语言数据结构---顺序表
- C语言日期时间标准库
- C语言实现矩阵相乘
- 《C语言编程初学者指南》一2.8 用C做算术运算
- 《C语言开发从入门到精通》一导读
- 《例说51单片机(C语言版)(第3版)》一1.5 MCS-51的开发流程与工具
- 基于单片机(C语言)的电梯程序控制系统【100010721】
- C语言实现猜数字游戏
- C语言的标准输入输出
- 【C语言】编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2.输出0;若s1<s2,输出一个负数。
- 《C语言编程魔法书:基于C11标准》——第一篇 预备知识篇 第1章 C魔法概览 1.1 例说编程语言
- 《C语言编程魔法书:基于C11标准》——1.3 主流C语言编译器介绍
- 《C语言编程魔法书:基于C11标准》——1.5 用C语言构建一个可执行程序的流程
- 《C语言编程魔法书:基于C11标准》——2.2 整数在计算机中的表示
- 《C语言编程魔法书:基于C11标准》——2.9 本章小结
- 《C语言编程魔法书:基于C11标准》——3.2 macOS系统下搭建C语言编程环境
- 《C语言编程魔法书:基于C11标准》——3.3 本章小结
- (第17列)C语言:键盘输入长度为10的数组,统计其中有多少不相同的数据
- 在C语言中,数组是不能递增的
- 由fprintf和printf看C语言三种标准流
- 1050 螺旋矩阵 (25 分)C语言
- 1042 字符统计 (20 分)C语言
- 关于标准C语言的预定义宏
- 理解C语言中的花式退出
- C语言问答九问
- C语言标准库