问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言条件编译指令详解:从#if到#endif的使用方法

创作时间:
作者:
@小白创作中心

C语言条件编译指令详解:从#if到#endif的使用方法

引用
CSDN
1.
https://blog.csdn.net/Jason_from_China/article/details/137441684

#if(开始(判断条件))+#endif(结束)

条件满足就参与编译,这里是一个判断的语句,当M大于0的时候,打印hehe不然就不打印

或者注释代码也好用

当#if 0的时候 ,也就是大规模的注释代码使用

当然结尾需要加上#endif

#endif(结束)

条件编译指令都需要#endif来结束

#if defined(判断是否已经被定义,定义了就执行)+#endif(结束)

如果没有定义#define max 那就不打印

如果定义了#define max 那就打印

#if defined(MAX)
// 如果 MAX 已经被定义,则执行这里的代码
printf("hehe\n");
#endif

#if !defined(判断是否未被定义,未定义执行)+#endif(结束)

#if !defined(MAX)
// 如果 MAX 未定义,则执行这里的代码
printf("hehe\n");
#endif

条件编译的嵌套使用

#if defined(OS_UNIX)
 #ifdef OPTION1
 unix_version_option1();
 #endif
 #ifdef OPTION2
 unix_version_option2();
 #endif
#elif defined(OS_MSDOS)
 #ifdef OPTION2
 msdos_version_option2();
 #endif
#endif

这段代码是使用条件编译来根据不同的操作系统定义来执行不同的代码块。这里的 OS_UNIXOS_MSDOS 是用来表示不同操作系统的宏,而 OPTION1OPTION2 可能是与特定操作系统相关的其他宏。

让我们逐行解释代码:

#if defined(OS_UNIX)

这行代码检查 OS_UNIX 是否被定义。如果当前编译的操作系统是 Unix(包括类Unix系统如Linux、BSD等),那么接下来的代码块会被编译和执行。

 #ifdef OPTION1
 unix_version_option1();
 #endif

这段代码首先检查 OPTION1 是否被定义。如果在 OS_UNIX 定义的文件中定义了 OPTION1,那么 unix_version_option1(); 这行代码会被编译和执行。OPTION1 可能是特定于Unix系统的功能或配置选项。

 #ifdef OPTION2
 unix_version_option2();
 #endif

这段代码与上一段类似,但它检查 OPTION2 是否被定义。如果在 OS_UNIX 定义的文件中定义了 OPTION2,那么 unix_version_option2(); 这行代码会被编译和执行。这允许特定于Unix系统的不同选项可以根据需要启用或禁用。

#elif defined(OS_MSDOS)

这行代码是 #if 的备用分支,用于检查 OS_MSDOS 是否被定义。如果当前编译的操作系统是 MS-DOS 或其他兼容系统,那么 #elif 块中的代码会被编译和执行。

 #ifdef OPTION2
 msdos_version_option2();
 #endif

这段代码与之前解释的类似,但它是在 OS_MSDOS 定义的情况下使用的。它检查 OPTION2 是否被定义,如果在 OS_MSDOS 定义的文件中定义了 OPTION2,那么 msdos_version_option2(); 这行代码会被编译和执行。这允许特定于MS-DOS系统的不同选项可以根据需要启用或禁用。

#endif

这行代码标记了条件编译块的结束。

总结一下,这段代码允许根据当前编译的操作系统选择性地编译和执行特定的功能。如果操作系统是Unix,则执行与 OPTION1OPTION2 相关的代码。如果操作系统是MS-DOS,则只执行与 OPTION2 相关的代码。如果操作系统既不是Unix也不是MS-DOS,那么整个代码块将被忽略。

#ifdef(定义了宏继续运行)+ #endif(结束)

#ifndef(没有定义宏则继续运行)+ #endif(结束)

在宏定义里面,我们有时候会定义的宏过多导致不知道宏是否已经定义了。所以我们可以·

- #ifdef 检查是否定义了某个宏,如果定义了,则编译后续的代码块。

- #ifndef 检查是否没有定义某个宏,如果没有定义,则编译后续的代码块。

下面是如何使用这些指令的例子:

#ifdef MAX
// 如果 MAX 已经被定义,则编译这里的代码
printf("MAX is defined.\n");
#endif
#ifndef MAX
// 如果 MAX 没有被定义,则编译这里的代码
printf("MAX is not defined.\n");
#endif

在第一个 #ifdef MAX 指令之后,预处理器会检查 MAX 是否已经被定义。如果 MAX 已经被定义(比如通过 #define MAX 10),那么 printf("MAX is defined.\n"); 这行代码会被编译和执行。如果 MAX 没有被定义,预处理器会忽略整个 #ifdef 和随后的 #endif 指令之间的代码块。

在第二个 #ifndef MAX 指令之后,预处理器会检查 MAX 是否没有被定义。如果 MAX 没有被定义,那么 printf("MAX is not defined.\n"); 这行代码会被编译和执行。如果 MAX 已经被定义,预处理器会忽略整个 #ifndef 和随后的 #endif 指令之间的代码块。

这些指令通常用于条件编译外部头文件,或者在不同的编译环境中编译相同的代码,以避免重复包含和潜在的冲突。

#ifdef和#ifndef 总结

  • #ifdef 指令检查是否已经定义了某个宏。如果该宏已定义,则执行 #ifdef 和相应的 #endif 指令之间的代码。
  • #ifndef 指令检查是否没有定义某个宏。如果没有定义该宏,则执行 #ifndef 和相应的 #endif 指令之间的代码。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号