c语言编译流程如下:
- 源代码即我们自己编写的 .c 或 .cpp 文件
- 编译实际执行的是对 .c 或 .cpp 文件的语法检查。若语法有误,编译阶段就会报错,无法通过。
- 对象文件是语法检查通过之后生成的 .o 文件,内容简单理解是函数的内存地址和对应的函数名。linux下可以通过
gcc -c test.c
生成 .c 对应的 .o 文件。
.cpp 文件编译为 .o 文件,需执行命令为:
g++ -c test.cpp
想要查看 .o 文件的内容,linux下可以使用命令:
nm -C test.o
内容类似:
000000000000000000 T add(int,int)
000000000000000020 T _main()
U _printf()
对象文件里装的是函数的声明,没有函数的定义,也可以通过编译。
PS:函数的定义,指有函数执行过程的函数定义。没有函数体的定义叫函数声明。c语言中,可以先声明函数,在接下来的程序中调用该函数,函数的定义即函数的具体实现可以放在后边或其它文件中。
- 链接实际执行的是将程序中涉及到的常量、函数的定义整合在一起,即定义检查,检查通过把它们放在一个文件中即最终的可执行程序。
- 学习c语言建议 linux 或者 mac 下使用 gcc 或 g++ ,了解具体的编译过程,调试纠错。开发中使用各种ide加快开发速度。
- 实际项目中,函数的定义都是用专门的文件存放。
- 实际项目中,可能需要第三方静态链接库。第三方静态链接库也是类似 .c 的文件,编译后生成的是 .a 文件,专门供别人调用,和 include 的系统库 stdio.h 类似。