zoukankan      html  css  js  c++  java
  • #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

  • 相关阅读:
    努力 加油
    大总结(全文手打)加深记忆 表单 注册页面的第一次制作 小白一只多多包含
    购物栏
    三级轮播
    图片轮播
    啊!!苦等,博客终于通过了!!
    SQL升级Oracle挖的Null坑,你懂的!
    关于master..xp_cmdshell’的几个错误_解决办法(转)
    班级博客
    图片系统架构思考之一:删除图片--不容忽视
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8955728.html
Copyright © 2011-2022 走看看