【Keil】预处理指令#ifndef、#define 和 #endif

当时就是因为两个.h文件的预处理指令内容相同,导致其中一个.h文件的声明一直无效!!

在 C 或 C++ 编程中,您看到的这两行代码是一种常见的头文件保护机制,用于防止头文件被多重包含(include multiple times)。这种情况可能发生在以下情况:

  1. 头文件自身引用自身:例如,一个头文件直接或间接地包含了它自己。
  2. 多个头文件相互引用:形成循环引用,文件 A 包含文件 B,文件 B 又包含文件 A。

当一个头文件被多重包含时,会导致同一个变量或函数被重复定义,这在 C 或 C++ 中是不允许的,会导致编译错误。

为了解决这个问题,程序员使用预处理指令 #ifndef#define#endif 来确保头文件只被包含一次。以下是这些指令的解释:

#ifndef __INS_DATA_SWITCH_H   // 如果没有定义 __INS_DATA_SWITCH_H
#define __INS_DATA_SWITCH_H   // 则定义 __INS_DATA_SWITCH_H
// 头文件的内容
#endif                     // 结束条件检查
  • #ifndef __INS_DATA_SWITCH_H:检查是否定义了 __INS_DATA_SWITCH_H。如果没有定义,编译器将继续处理下面的代码。
  • #define __INS_DATA_SWITCH_H:定义 __INS_DATA_SWITCH_H 为一个宏。如果头文件被多重包含,这个宏已经定义了,预处理器将跳过这个头文件的所有内容。
  • #endif:标记检查的结束。

使用这种机制,无论头文件被包含多少次,头文件的内容只会被编译一次,从而避免了多重定义的问题。

此外,宏定义通常使用独特的标识符,如 __INS_DATA_SWITCH_H,以确保它们不会与系统中的其他宏冲突。在 STM32 和其他嵌入式项目中,这是一个很好的实践,可以保持代码的清洁和避免潜在的编译错误。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值