1. #if 用法
#if 整型常量表达式1
程序段1
#elif 整型常量表达式2
程序段2
#elif 整型常量表达式3
程序段3
#else
程序段4
#endif
#if、#elif、#el## 标题se 和 #endif 都是预处理命令,这些操作都是在预处理阶段完成的,多余的代码以及所有的宏都不会参与编译,不仅保证了代码的正确性,还减小了编译后文件的体积。
这种能够根据不同情况编译不同代码、产生不同目标文件的机制,称为条件编译。条件编译是预处理程序的功能,不是编译器的功能。
2. #ifdef
`#ifdef 宏名
程序段1
#else
程序段2
#endif`
如果当前的宏已被定义过,则对“程序段1”进行编译,否则对“程序段2”进行编译。
3.#ifndef
#ifndef 宏名
程序段1
#else
程序段2
#endif
与 #ifdef 相比,仅仅是将 #ifdef 改为了 #ifndef。它的意思是,如果当前的宏未被定义,则对“程序段1”进行编译,否则对“程序段2”进行编译,这与 #ifdef 的功能正好相反。
4.三者之间的区别
if 后面跟的是“整型常量表达式”,而 #ifdef 和 #ifndef 后面跟的只能是一个宏名,不能是其他的。
参考文档和更详细的解释见:
http://c.biancheng.net/view/1986.html