#if 与 #ifdef 之间的区别

先来看个例子:

#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

它的作用是:如果 (MAX10)||(MAX20) 成立,那么编译器就会把其中的 #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 就可以达到目的。

本文转自:blog.csdn.net/zhangchiytu/article/details/7563329

原文地址:https://www.cnblogs.com/GyForever1004/p/8955728.html