先说一下c语言执行代码的流程,C程序->预处理器->编译器->目标代码,所以说预处理器在执行程序中起到了重大的作用。
接下来说一下与预处理器相关的一些指令
1.#define
#define是C语言中的宏定义命令,又分为无参宏定义和带参宏定义两种形式,定义形式分别为:#define 标识符 字符串、#define 宏名(形参表) 字符串。
例子: #define a 100
前面这个例子在预处理后会被删,并将a的值植入到原程序中的变量里。
2.#undef
#undef的用法与#define类似,不过与其相反,#undef的作用为删除一个宏定义
例子: #undef a
接下来还有条件编译的指令
3.#ifdef与在程序中的if类型
#ifdef=#if defined
例子: #ifdef a
这条程序的意思为,如果定义了a,则将接下来的程序交给编译器去执行,否则删除该程序。
4.#ifndef与#ifdef的用法相反,这里就不做过多介绍。
下面为一些比较常见的用法
(1)
另外define还可以用作标识符,若为一个定义过的宏则返回1,否则返回0,常与#if结合使用,如:
#if defined(Debug)
....................
#endif
上方的括号可以去除
(2)
使用条件编译可以编写可以用不同的编译器编译的程序
#if_STDC_ //判断编译器是否支持(C89或C99)
函数原型
#else
老式的函数声明
#endif
(3)
我们不能直接用/*......*/直接注释掉已经包含/*.....*/注释的代码,但#if可以实现
#if 条件
包含注释的代码行
#endif
(当条件为1时则不删除代码行,否则删除,不加入编译器中)