先来说一下宏的几个作用
#if与if的区别:
1、属性作用不同
#if是条件编译,条件编译是根据 宏条件 选择性地编译语句;而if是条件语句,条件语句是根据条件表达式选择性地执行语句。
2、执行时期不同(重点)
#if是编译器在编译代码时完成的,if是在程序运行时进行的在程序运行时执行。
3、使用不同
#if后面不能写变量,if后面可以写变量。
#if与#ifdef的区别
1)#if条件编译的意思是如果#if后面的条件为真,则执行,如果为假,则不执行,如果没有define,也不不执行,于此一起用的有#elif,#else, #endif。elif相当于else if,判断中间可以弄n个elif。
例如:
#if 条件 表达式;
#elif 条件 表达式;
#else 条件 表达式;
#endif;
2)#ifdef则相对于#if没有判断,如果宏有定义则执行,否则不执行,于此一起用的有#else, #endif。
例子:
#ifndef macro_name
代码段 2
#else
代码段 1
#endif
相对于ifdef,if可以有条件,比如2个宏都定义了才运行代码段A,则
#ifdef define(a)
#ifdef define(b)
代码段A
#endif
#if的情况
#if define(a)|| define(b)
代码段A
#endif
所以,有复杂的条件时#if时很好的选择。
参考 C语言的条件编译