C程序编译步骤:
预处理
(完成这一步生成预处理文件)编译
(完成这一步生成汇编文件)汇编
(完成这一步生成目标文件)链接
(完成这一步生成可执行文件)
一、预处理
宏替换、头文件展开、条件编译 等等,同时将代码中的注释删除,预处理不会检查语法
1. 头文件展开
#include <stdio.h>
void main()
{
printf("Hello Wolrd\n");
return;
}
gcc -m32 -E hello.c -o hello.i
预处理后 生成 .i
为后缀的预处理文件
查看 hello.i
文件的内容:
2. 宏定义替换
格式
#define 标识符 常量
宏所表示的常量可以是数字、字符、字符串、表达式。其中最常用的是数字。
#include <stdio.h>
#defind PI 3.14
void main()
{
printf("Hello Wolrd %lf\n", PI);
return;
}
#include <stdio.h>
#defind PI 1+2.0
void main()
{
printf("Hello Wolrd %lf\n", PI);
return;
}
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