【一天一个计算机知识】—— 【编程百度】条件编译

在这里插入图片描述

在这里插入图片描述

点击下面查看作者专栏
🔥🔥C语言专栏🔥🔥
🌊🌊编程百度🌊🌊
🌠🌠如何获取自己的代码仓库🌠🌠

📥 什么是条件编译?

条件编译是C语言(以及C++等)预处理阶段的一项核心功能
它允许您在代码实际被编译之前,根据一组预定义的条件,告诉预处理器“包含”或“排除”哪些代码块

简单来说,它就像是给编译器看的 if-else 语句。

  • 运行时 if:程序运行时,根据变量的值决定执行哪条路径。

  • 编译时 #if:程序编译时,根据预设的宏或常量决定哪段代码被编译进最终的可执行文件中。

如果条件为假,那部分代码块根本不会被编译,就好像您手动删除了它们一样

🛠️ 核心指令详解

条件编译主要由以下几组预处理器指令控制:

1. #if, #elif, #else, #endif

这是最灵活的条件编译指令,它会计算一个常量表达式的值

  • #if :如果 expression (表达式) 为真(非零),则编译后续代码

  • #elif#elif 如果前面的 #if#elif 不为真,则检查这个 expression

  • #else:如果以上所有条件都不为真,则编译这部分代码。

  • #endif:标记条件编译块的结束。

注意: 表达式必须是预处理器在编译时就能计算出来的常量,不能是变量

在这里插入图片描述

2. #ifdef#ifndef

这两个指令只检查一个宏(Macro)是否被定义过,而不关心它的具体值。

  • #ifdef <MACRO_NAME>:(if defined) 如果 MACRO_NAME 已被定义,则编译后续代码。

  • #ifndef <MACRO_NAME>:(if not defined) 如果 MACRO_NAME 未被定义,则编译后续代码。

它们通常与 #else#endif 配合使用。

在这里插入图片描述

3. defined() 操作符

defined() 是一个特殊的预处理器操作符,它必须在 #if#elif 中使用。它提供了比 #ifdef 更强大的灵活性,因为它允许您在单个表达式中组合多个检查。

defined(MACRO_NAME):如果 MACRO_NAME 被定义,则返回 1 (真);否则返回 0 (假)。

在这里插入图片描述



📋 综合实例演示

示例 1:头文件保护 (Header Guard)

这是 string.h(一个假设的自定义头文件)为了防止被重复包含:

在这里插入图片描述

  • 第一次包含:_MY_STRING_H_ 未定义,#ifndef 为真。代码执行,_MY_STRING_H_ 被定义,头文件内容被包含。

  • 第二次包含:_MY_STRING_H_ 已被定义,#ifndef 为假。从 #ifndef#endif 之间的所有代码被跳过。


示例 2:跨平台代码

在这里插入图片描述


示例 3:临时注释代码 (Debug)

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值