C语言的特征与应用场景
C语言是种古老的语言,其相对于现在流行的语言来说,有几个特征:
1) 对于同样的程序逻辑,其C语言实现的性能是非常高的,通常仅次于汇编语言(ASM);
2) C语言通常会被直接编译成目标机器与操作系统下的程序,中间没有解释器和虚拟机;
3) C语言没有内置面向对象(OOP)语法,但其提供了跟Class有点像的结构体类型。如果真的想要在C语言下进行OOP,往往需要间接的通过一些其他的软件设计方法;
4) C语言离机器与操作系统更近,比方说C语言直接对程序员提供了内存模型;
5) 具有一定的跨机器与跨系统移植的能力,但仅限于源码级。比如相比Java的“1份代码,1次编译,n处运行”,C最多只能“1份代码,n处编译,n处运行”;
6) 开发效率较低,同样的逻辑C语言的代码量可能是Java的几倍,是Python的几十倍;
基于这样的特征,C语言的应用场景大多集中在操作系统、驱动、单片机、物联网等追求性能或硬件资源受限的场景。对Web开发这样的场景,通常很难见到C语言的身影。但是相当多的Web程序中间件、微服务组件都是用C开发的。腾讯就开发了许多基于C的微服务,供Web程序调用。
C语言的衍生语言
1) C++: C++的初衷是让C语言支持面向对象的class语法,其支持继承、多态等OOP编程惯用法。也就是说C++就是面向对象的C,除此之外C++还有模板等更强大的特性;
2) C#: C#是微软开发的编程语言,可以看作是更加面向对象的C++,比较像Java;
3) Objective-C: 是沿另一路线(非C++路线)实现的C语言的面向对象化,是C的严格超集;
C语言的标准
C语言是有很多标准(版本)的,不同标准间的语法是有一定差异的,下面介绍几种C的标准:
K&R C: C语言因为历史原因,最早是没有标准的。直到 Kernighan与Ritchie(C语言之父)合著了经典的《The C Programming Language》,然后这本著作就成为了第1个C语言的标准。
C89/C90: 1983年美国国家标准协会(ANSI)成立制定C语言标准的委员会,并在1989年作为美国标准发布,称为C89(ANSI C)。紧接着在1990年,ISO批准C89成为国际标准,称为C90(ISO C),C89和C90仅在文档有细节差异,所以从技术上C89、ANSI C、C90、ISO C是同个标准,也是第1个国际官方标准。
C99: ANSI和ISO在1999、2000年所通过的一版C语言标准,是第2个国际官方的C语言标准。
C11: 2011年通过的第3个国际官方的C语言标准。
这些标准之间并不是向前兼容的关系。目前应用最广的是C90和C99标准,C99尚有部分编译器不能完整支持。这种标准的状况有点像ECMAScript。在学习和编程的过程中需要注意标准的问题,通常编译器允许程序员自行指定C语言标准。比如在gcc命令的参数中添加”-std=c99″。
C语言的编译器
GCC: 本是为GNU系统专门编写的,目前是Linux和部分类Unix系统的默认编译器,支持多种语言;
Clang:由苹果公司主导基于LLVM的C/C++/OC编译器,目前是FreeBSD和macOS的默认编译器;
Visual Studio:是微软开发的软件开发工具,其除了包含多种语言的编译器,还包括IDE等工具;
这3种是最主流的Linux/macOS/Windows下的可支持C语言的编译器。因为我目前主要用类Unix系统比较多,所以接下来的学习过程主要使用gcc与clang。
C语言基本开发环境的搭建
Linux:大部分Linux系统会自带GCC编译器,如果不自带的话,就利用apt/yum/apk这样的不同Linux发行版中的包管理器自行安装即可,也可以选择安装clang。
macOS:对于最新的Catalina系统而言,需要先安装Xcode命令行工具,安装完后就可以找到clang和gcc两个Shell命令,但是macOS的gcc命令实际上是链接到clang的。
Windows:在WIN10下我会选择通过Linux子系统(WSL)工具安装Ubuntu然后使用GCC/clang。
IDE:目前暂时通过可跨平台的VSCode+官方C语言插件实现。
本章节的基准是C90+GCC+Linux。