`
quanminchaoren
  • 浏览: 926451 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

#if、#ifdef、#if defined之间的区别

阅读更多

#if的使用说明

#if的后面接的是表达式

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

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

#if defined的使用

#if后面接的是一个宏。

#if defined (x)
    ...code...
#endif

这个#if defined它不管里面的“x”的逻辑是“真”还是“假”它只管这个程序的前面的宏定义里面有没有定义“x”这个宏,如果定义了x这个宏,那么,编译器会编译中间的…code…否则不直接忽视中间的…code…代码。

另外 #if defined(x)也可以取反,也就用 #if !defined(x)

#ifdef的使用

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

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

分享到:
评论

相关推荐

    C语言的条件编译[参考].pdf

    #### (2) `#if` 与 `#ifdef` 或 `#defined()` 比较 `#if` 可以直接比较宏的值,而 `#ifdef` 和 `#defined()` 则只检查宏是否存在。例如,当需要基于宏 `MY_PRINTF_EN` 的值来决定是否编译自定义的 `printf` 函数时...

    yingyong.rar_If...

    // Code to be compiled if MACRO is defined #endif ``` 例如,如果你有一个特定的代码段仅在某个特定平台或配置下需要,你可以用`#ifdef`来包含或排除它。 `#ifndef` 是`#ifdef`的反义词,它检查一个标识符是否...

    C语言中几个关键字的定义.doc

    这里我们将深入探讨`#if`、`#ifdef`、`#if defined`以及`extern`的关键概念。 首先,`#if`和`#ifdef`是C语言的预处理器指令,它们用于条件编译。`#if`指令需要一个表达式作为参数,如果表达式的值非零(即真),则...

    C语言预编译指令详解.docx

    2. #if 与 #ifdef 或 #if defined()比较 #if 指令可以用来设置不同的条件,在编译时编译不同的代码。但是,#ifdef 或 #if defined() 指令可以实现更复杂的条件编译。 C语言预编译指令是非常强大的,可以实现条件...

    单片机基础c语言之条件编译.rar_单片机基础c语言之条件编译

    #if defined(DEBUG) && defined(RELEASE) // 这个条件不可能同时满足,所以会进入#else部分 #else // 这部分代码总会被执行 #endif ``` 4. `#endif`:用于结束一个条件编译块。每个`#if`、`#ifdef` 或 `#...

    《C深度解析》第二章 C预编译——宏定义、条件编译、头文件包含、特殊预编译关键字

    (3)条件编译:#if、#else、#elif #endif、#ifdef和#ifndef、#if与defined、条件编译与配置文件(4)一些特殊的预编译关键字与实际应用:defined、#error、#line、#与##、#pragma (5)文件包含:是否只能包含.h...

    c语言条件编译精讲

    `#if`-`#elif` 结构类似于C语言中的`if`-`else if` 语句,可以检查多个条件,并选择第一个满足条件的程序段进行编译。其结构如下: ```c #if 表达式1 程序段1 #elif 表达式2 程序段2 ... #elif 表达式n 程序段n ...

    介绍c语言中条件编译相关的预编译指令

    #elif 命令若#if, #ifdef, #ifndef 或前面的#elif 条件不满足,则执行#elif 之后的语句,相当于 C 语法中的 else-if。 例如: ```c #if _DEBUG // ... #elif _RELEASE // ... #endif ``` 7. #else #else 命令与...

    #ifndef与#define及#endif_C语言_

    `#ifndef` 是 "If Not Defined" 的缩写,它的作用是检查指定的宏是否已经定义过。如果该宏未被定义,则会执行其后的代码块。这个指令常用于头文件中,防止头文件被多次包含导致的重复定义问题。 例如,如果你有一个...

    C语言的条件编译.pdf

    在条件编译中,可以组合使用逻辑运算符,例如 #if defined(MACRO_1) || (!defined(MACRO_2) && defined(MACRO_3)) 来根据复杂的条件包含或排除代码。此外,还可以定义条件编译中的版本控制,如通过 #ifdef MY بطر...

    c语言中的#ifndef、#def、#endif等宏是什么意思.doc

    `#ifndef`(ifndef 是 "if not defined" 的缩写)宏检查指定的标识符是否已被定义。如果标识符未被定义,那么在其后的代码块将被编译。这常用于确保某个宏定义只被定义一次,防止重复定义导致的问题。例如: ```c #...

    c语言条件编译详解

    #if defined(DEBUG) #define LOG(x) printf("%s\n", x); #else #define LOG(x) #endif ``` 在这个例子中,如果`DEBUG`被定义,那么`LOG`将是一个打印函数;否则,`LOG`将是一个空操作,不会产生任何输出。 #### ...

    packet32.h

    #ifdef HAVE_AIRPCAP_API #include #else #if !defined(AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_) #define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ typedef ...

    C语言中的预处理器魔法:指令使用全指南

    #if defined(WINDOWS) && !defined(WINDOWS_64) // 32-bit Windows specific code #elif defined(LINUX) // Linux specific code #else #error "Unknown operating system" #endif ``` #### 宏的取消定义 使用`#...

    预处理命令的学习心得.txt

    #if defined(DV22_AUX_INPUT) #define AUX_MODE 3 #else #define AUX_MODE 2 #endif ``` 以上代码根据`DV22_AUX_INPUT`是否定义来决定`AUX_MODE`的值。 #### 五、头文件保护 为了避免头文件被多次包含导致的问题...

    c语言预处理 - c语言最后一课.zip

    2. **条件编译**:C语言提供`#if`、`#ifdef`、`#ifndef`、`#else`和`#endif`等指令进行条件编译。这些指令允许根据某个条件包含或排除特定代码块,常用于针对不同平台或配置优化代码,或者处理编译时的条件。 3. **...

    C语言预处理程序

    #if defined(DEBUG) printf("Debug mode\n"); #else printf("Release mode\n"); #endif ``` 2. **`#ifdef`/`#ifndef`**: - `#ifdef`: 如果宏已定义,则编译下面的代码。 - `#ifndef`: 如果宏未定义,则...

    C语言中宏及typedef 的高级技巧

    #if defined(MY_FEATURE) // 当MY_FEATURE被定义时,编译这段代码 #else // 否则,编译这段代码 #endif ``` #### 2. **宏定义的应用案例** - **示例1:条件性地定义类型** - 假设我们需要在不同的平台上...

    C_语言专题_预编译和宏定义.doc

    C语言提供了多种条件编译指令,例如`#ifdef`、`#ifndef`、`#if`等。 ##### 1. `#ifdef <标识符>` 该指令用于检查一个宏定义是否存在。如果存在,则编译`<程序段1>`;否则,如果有`#else`子句,则编译`<程序段2>`。...

Global site tag (gtag.js) - Google Analytics