C语言编译与链接
1、C语言实现是通过编译和链接两个步骤完成的,编译器把源代码转化为中间代码,链接器把中间代码和其他代码合并,生成可执行文件。链接器还将自己编写的程序和预编译的库代码合并。
源代码——经过编译器—-变成中间代码—–经过链接器与其他代码合并—生成可执行文件
2、中间代码(也是目标代码,目标文件)缺失启动代码(startup code),无法运行,同时还缺少函数库,几乎所有的C程序都要使用C标准库中的函数。
3、链接器的作用就是把目标代码、系统的标准启动代码、库代码这3部分合并成一个文件,即可执行文件。
对于库代码,链接器只会把程序中要用到的库函数代码提取出来。(启动代码充当着程序和操作系统之间的接口)
4、简而言之,目标文件和可执行文件都是由机器语言指令组成的。然而,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写的程序中使用的库函数和启动代码的机器代码。
5、有些系统中必须分别运行编译器和链接器,有些系统中编译器会自动启动链接器,用户只需要给出编译命令即可。
UNIX系统
在UNIX系统上编辑
1、可以使用各种文本便捷器,文件名以“.c”结尾即可。必须是小写的c,该文件中内容为源代码,该文件叫源文件
在UNIX系统上编译
1、编译器是将我们编写的代码(源代码)变为计算机能看懂的代码(机器代码),最后生成的可执行文件中包含计算机要完成任务所需要的所有机器代码。
2、以前UNIX C编译器需要用语言定义的cc命令,目前已经退出舞台,但是UNIX系统提供的C编译器通常来自一些其他源,然后以cc命令作为编译器的别名。因此虽然不同的系统中会调用不同的编译器,但用户仍然可以继续使用相同的命令。
执行gcc -v 源文件名(例如mmm.c)可以看到程序编译、链接的详细流程
3、编译器会创建一个与源代码基本名相同的目标代码文件,但是其扩展名是.o,一但链接器生成了可执行文件,就会将.o文件删除。如果原始程序有多个源代码文件,则保留目标代码文件。
GNU编译器集合和LLVM项目
1、GNU编译器集合(也被称为GCC,其中包含GCC C编译器),是该项目的产品之一。GCC在一个指导委员会的带领下,持续不断地开发,它的C编译器紧跟C标准的改动。用gcc命令便可以调用GCC C编译器。许多使用gcc的系统都用cc作为gcc的别名。
LINUX系统
与UNIX不同之处是,要使用GNU提供的GCC公共域C编译器,编译命令类似于gcc inform.c
PC的命令行编译器
windows :Cygwin,MinGW这样便可以在PC上通过命令上使用GCC编译器
备注
1、通过getchar()可以让程序暂停,一般使用2个getchar(),第一个用来接收上一个输入数据的回车键。第二个是真正的等待。