#if 和#ifdef的区别

时间:2022-05-04
本文章向大家介绍#if 和#ifdef的区别,主要内容包括先看个例子:、#ifdef的使用、#if defined的使用、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

转载自 http://blog.csdn.net/zhangchiytu/article/details/7563329

 先看个例子:

#define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA   0 #ifdef TARGET_LITTLE_ENDINA call little endina function #else call big endina function #endif 不管把TARGET_LITTLE_ENDINA和TARGET_BIG_ENDINA定义成0或者1,甚至后面不写这个0或者1 ,调用的都是little endina函数,这段代码是有问题的,就是没有理解#if和#ifdef之间的区别。

#if的使用说明

#if的后面接的是表达式,如果表达式为1,则编译#if下面的代码

#if (MAX==10)||(MAX==20)
 code...
#endif

它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)

#ifdef的使用

#if后面接的是一个宏

#ifdef (x)
    ...code...
#endif

这个#ifdef 它不管里面的“x”的逻辑是“真”还是“假”,它只管这个程序前面的宏定义里面有没有定义“x”这个宏(即在这里#define  x 1和#define  x 0等效,都等同于#define x),如果定义了x这个宏,那么编译器会编译中间的…code…否则直接忽视中间的…code…代码。

#if defined的使用

#if defined() 的使用和#ifdef的用法一致 #if !defined()又和 #ifndef 的用法一致。

最后强调两点: 第一:这几个宏定义只是决定代码块是否被编译! 第二:别忘了#endif

明白了之间的区别问题就变得非常的容易,修改上述代码只要把其中的#ifdef改成#if就可以达到目的。