1.预处理的概念
- 由源码到可执行文件的过程:
源码.c->(预处理)->预处理过的.c->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序
gcc -E xx.c -o xx.i
可以实现只预处理不编译,可以用来帮助我们研究预处理过程,帮助debug程序
2.条件编译
#if
和#ifdef
的区别:#if
后面跟的值只要是非零就为真,而#ifdef
后面跟的宏被定义就为真- 值得注意的是,条件编译要注意顺序,如果
#define xxx
在#ifdef xxx
后面,那么这个#ifdef xxx
是为假、不成立的
3.宏定义
- 宏定义是没有先后顺序讲究的,这和条件编译不同,宏定义是递归替换的,直接会替换到没有宏定义为止,比如
#define M 10
#define N M //纵使M定义在N之前,N的值仍然会被替换成10
- 宏定义的机制:宏定义视括号括起来的语句