C程序编译步骤:

  1. 预处理(完成这一步生成预处理文件)
  2. 编译(完成这一步生成汇编文件)
  3. 汇编(完成这一步生成目标文件)
  4. 链接(完成这一步生成可执行文件)

一、预处理

宏替换头文件展开条件编译 等等,同时将代码中的注释删除预处理不会检查语法
1. 头文件展开
#include <stdio.h>

void main()
{
    printf("Hello Wolrd\n");
  
    return;
}

gcc -m32 -E hello.c -o hello.i

预处理后 生成 .i为后缀的预处理文件

查看 hello.i 文件的内容:

hello.i 文件的内容
2. 宏定义替换
  • 格式

    #define 标识符 常量

    宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。

#include <stdio.h>
#defind PI 3.14

void main()
{
    printf("Hello Wolrd %lf\n", PI);
  
    return;
}

宏定义替换1

#include <stdio.h>
#defind PI 1+2.0

void main()
{
    printf("Hello Wolrd %lf\n", PI);
  
    return;
}

宏定义替换2

3. 条件编译
#include <stdio.h>

void main()
{
    #if 0
    printf("Hello Wolrd\n");
    #endif
    return;
}

#if 0 :表示条件不成立,在 #if 0#endif 之间的代码不会被预处理编译等

#if 1 :表示条件成立,在 #if 1#endif 之间的代码会被预处理编译等

指定编译条件
#include <stdio.h>

void main()
{
    #if abc
    printf("Hello Wolrd\n");
    #endif
    return;
}

编译条件:如果 abc 为 1,就会编译

使用 gcc -m32 -E hello.c -o hello.i -Dabc 就会编译 if条件编译的代码

使用 gcc -m32 -E hello.c -o hello.i 就不会编译 if条件编译的代码

二、编译

预处理文件.i 编译生成 汇编文件.s

gcc -m32 -S hello.i -o hello.s

检查语法是否有误

三、汇编

汇编文件.s 编译生成 二进制文件.o

gcc -c hello.s -o hello.o

四、链接

这一步设置运行环境堆栈空间链接其他库文件

gcc hello.o -o hello

最后修改:2022 年 06 月 30 日
如果觉得我的文章对你有用,请随意赞赏