6.gcc编译器
6.1 gcc的工作流程
gcc编译器将c源文件到生成一个可执行程序,中间一共经历了四个步骤:
四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程,其中编译最耗时,因为要逐行检查语法。
gcc的工作流程:
1.预处理: cpp预处理器, 去掉注释, 展开头文件, 宏替换
gcc -E test.c -o test.i
2.编译: gcc, 将源代码文件编译成汇编语言代码
gcc -S test.i -o test.s
3.汇编: as, 将汇编语言代码编译成了二进制文件(目标代码)
gcc -c test.s -o test.o
4.链接: ld, 链接test.c代码中调用的库函数
gcc -o test test.o
一步生成最终的可执行程序:
gcc test.c -o test
6.2 gcc常用参数
▶-v 查看gcc版本号, --version也可以
▶ -E 生成预处理文件
▶ -S 生成汇编文件
▶ -c 只编译,生成.o文件, 通常称为目标文件
▶ -I 指定头文件所在的路径
▶ -L 指定库文件所在的路径
▶ -l 指定库的名字
▶ -o 指定生成的目标文件的名字
▶ -g 包含调试信息,使用gdb调试需要添加-g参数
▶ -On n=0∼3 编译优化,n越大优化得越多
例如:下面代码片段
int a = 10;
int b = a;
int c = b;
printf("%d", c);
上面的代码可能会被编译器优化成:
int c = 10;
printf("%d", 10);
▶ -Wall 提示更多警告信息
int a;
int b;
int c = 10;
printf(“[%d]\n”, c);
编译如下:
gcc -o test -Wall test.c
warning: unused variable ‘b’ [-Wunused-variable]
warning: unused variable ‘a’ [-Wunused-variable]
▶ -D 编译时定义宏
test.c文件中的代码片段:
printf("MAX==[%d]\n", MAX);
编译:
gcc -o test test.c -D MAX=10
gcc -o test test.c -DMAX=10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)