从c语言到二进制可执行文件

本文详细介绍了C语言源代码转化为二进制可执行文件的完整流程,包括预处理(查找头文件、处理宏等)、编译(词法分析、语法分析、语义分析等)、汇编、链接以及执行阶段。讨论了预处理中的头文件搜索路径、宏定义的注意事项,以及编译过程中的各个步骤和优化策略。同时,提到了使用不同工具(如gcc、clang、objdump)进行分析和调试的方法。
摘要由CSDN通过智能技术生成

流程:预处理 -> 编译 -> 汇编 -> 链接 -> 执行

1 预处理

预处理 = 文本粘贴工作

#include <stdio.h>
#define MSG "Hello \
World!\n"
int main() {
   
  printf(MSG /* "hi!\n" */);
#ifdef __riscv
  printf("Hello RISC-V!\n");
#endif
  return 0;
}

命令:gcc -E a.c,会产生a.c的预处理文件,发现会把stdio.h(/usr/include/stdio.h)粘贴到预处理文件中。

1.1 编译器如何找到头文件(gcc如何找到stdio.h)

方法: 阅读工具的日志(查看是否支持verbose, log等选项)

gcc -E a.c --verbose > /dev/null

verbose 的意思就是打印出编译连接时的详细信息。
/dev/null:丢掉预处理结果

给出了搜索头文件的顺序:

#include “…” se

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座硅农(Leo ICer)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值