除了使用调试器查找程序缺陷之外,我们还可以检查编译过程中生成的文件。对于gcc
来说,-c
用于生成目标文件,-S
生成汇编文件,而-E生成预处理文件。配合使用-save-temps
,则可以生成多个文件,如
gcc -save-temps -c hello.c
生成并保留目标文件(hello.o
)、汇编文件(hello.s
)和预处理文件(hello.i
)
查看预处理文件最大的问题就是宏定义,因为宏都被预处理掉了,使用-E -dM
选项,可以查看编译器到底定义了哪些宏。
gcc -E -dM hello.c