生态与开发环境

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。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部