C语言的defined和 #undef

一:     

      在C语言中,#define、#if、#ifdef 和 #endif 是预处理指令,它们在编译之前由预处理器处理。这些 指令主要用于条件编译,即根据条件决定是否包含某些代码。
#define Blc_ctrl_by_pwm
#if (defined(Blc_ctrl_by_pwm))
// 这里是当 Blc_ctrl_by_pwm 被定义时,会包含的代码
#endif

1. #define Blc_ctrl_by_pwm

        这行代码使用 #define 指令定义了一个宏 Blc_ctrl_by_pwm,但没有给它指定替换文本(即通常所说的宏的值)。在C语言中,仅仅定义宏而不给它赋值是合法的,这种用法通常用于条件编译中,作为标记(flag)使用。

2. #if (defined(Blc_ctrl_by_pwm))

        这行代码使用了 #if 指令,结合 defined 操作符来检查 Blc_ctrl_by_pwm 宏是否已经被定义。defined 是一个预处理操作符,用于检查某个宏是否已定义。如果 Blc_ctrl_by_pwm 已定义(就像之前通过 #define Blc_ctrl_by_pwm 所做的那样),则 defined(Blc_ctrl_by_pwm) 的结果为真(即非零),#if 指令后面的代码块将被包含在编译过程中。

3. #endif

#endif 指令标志着 #if、#ifdef、#ifndef 条件编译块的结束。

      这段代码的原理是:通过 #define 定义一个宏 Blc_ctrl_by_pwm 作为编译时的标记(或称为条件编译的开关),然后使用 #if (defined(Blc_ctrl_by_pwm)) 来检查这个宏是否已经被定义。如果已定义(即条件为真),则编译器会包含 #if 和 #endif 之间的代码块进行编译。这种方式常用于根据编译时的条件(如特定的编译选项、硬件配置等)来包含或排除某些代码段。

  二:

#undef PRINT_MODULE_NAME:取消了之前定义的PRINT_MODULE_NAME宏。如果PRINT_MODULE_NAME之前已经被定义,那么它的定义将被移除,否则这条指令不会有任何效果。

#define PRINT_MODULE_NAME "<APPGUI>":定义了一个新的宏PRINT_MODULE_NAME,并将其值设置为字符串"<APPGUI>"。如果之前PRINT_MODULE_NAME已被取消定义(如上一步所示),那么这将是一个全新的定义;如果之前没有被定义,那么这也是一个新的定义。

      目的是在C语言程序中动态地修改或覆盖宏定义。通过先使用#undef指令确保没有旧的宏定义干扰,然后使用#define指令设置新的宏定义。这在需要根据不同条件或环境改变程序行为时非常有用,比如在日志记录中改变模块名称以区分不同的应用或组件。此外,这种技术也常用于条件编译,通过定义或取消定义特定的宏来控制代码的不同部分是否被编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值