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

  • 相关阅读:
    30分钟掌握ES6/ES2015核心内容(下)
    30分钟掌握ES6/ES2015核心内容(上)
    域名、主机名与URL
    localstorage sessionstorage cookie的区别
    http中post 和 get 请求方法区别
    leetcode33. 搜索旋转排序数组
    leetcode 56. 合并区间
    MySQL EXPLAIN
    array 数组
    判断一个字符串的所有字符是否都在另一个字符串中
  • 原文地址:https://www.cnblogs.com/GyForever1004/p/8955728.html
Copyright © 2011-2022 走看看