C语言是一门介于低级语言(如汇编语言)和高级语言(如Java,Python)之间的一门编程语言,所以它兼有两类语言的一些优点,并且具有自身的一些特点。
1、c语言的高效性。c语言具有通常是汇编语言才具有的微调试能力,可以根据具体情况微调使得程序更好的使用内存或获得更快的运行速度。
2、c语言的可移植性。相对于汇编语言、BASIC语言以及FORTRAN语言等,c语言程序能够稍作修改或甚至不做修改就能在不同计算机系统下运行。
3、强大而灵活。强大而灵活的UNIX系统大部分就是用c语言写的;其他语言(如FORTRAN、Perl、Python、Pascal、LISP、Logo、BASIC)的许多编译器和解释器也是用c语言写的。很多高级语言编译器都会把源程序代码编译为c程序而后才最后生成可执行的机器代码。
4、面向程序员。c语言是一种面向过程的结构化语言,它的编写非常灵活,也就导致了c程序的编写在不同程序员的操作下就五花八门,它的限制少(如指针运算,虽然这也带来了一些弊端),提供了开发者更多的自由。
下图显示了编译器在高级语言程序和机器之间扮演的角色:
关于c编程的基本策略:用程序将源代码文件转换为可执行文件。其基本步骤为编译和链接——编译将源代码转换为中间代码,而链接器把中间代码和其他代码合并(包括将编写的程序和预编译的库代码合并),生成可执行文件。
编译器产生的中间代码保存在目标代码文件(.obj)中,但这还不是一个完整的程序,它缺少启动代码以及库函数等,这些成分的补充需要链接器完成。
有些系统中,编译器工作时会自动启用链接器,而有些则需要分别运行编译程序和链接程序才能得到可执行文件。
UNIX系统下的c编程。首先编辑源代码,在UNIX系统下编译可以用cc命令。如
cc example.c
就对example.c源代码文件进行了编译,用 ls 命令可以看到编译后生成了可执行文件a.out。输入
a.out
可以执行该可执行文件得到程序的输出。
c编译器在编译时会生成与源代码基本名相同的目标代码文件,扩展名为 .o ,但是一旦链接器生成了完整的可执行文件这个 .o 文件就会被删除。但是当原始程序有多个源代码文件时,目标代码文件会被保留。
……
GNU项目中的一个编译器集合GCC中包含着GCC C编译器,使用gcc命令便可调用GCC C 编译器。
LLVM项目是一个与编译器相关的开源软件集合,它用Clang编译器处理c代码,可通过clang调用。
GCC和Clang编译器都对最新版本的C标准提供支持。
两者都可以通过-v显示版本信息,也都可以使用 cc 来作为gcc或clang的别名,如
cc -v
可以显示所使用的编译器及其版本。