#undef

看到个例子:

 

 

在同一个头文件中定义结构类型相似的对象,根据宏定义不同获取不同的对象,主要用于增强代码的可读性:

例如:在头文件student.h中定义两个学生对象(小明和小红),两个对象互不干涉:

#ifdef MING
#define MING_AGE 20
#define MING_HEIGHT 175
#endif

#ifdef HONG
#define HONG_AGE 19
#define HONG_HEIGHT 165
#endif

/********头文件2:student.h********/

在源文件中使用这两个对象:

#include <stdio.h>

#define MING
#include "student.h"
#undef MING                                         /*这样就只有在student.h中才能使用宏。*/
#define HONG
#include "student.h"
#undef HONG

int main()
{
printf("Xiao Ming's age is %d.\n", MING_AGE);
printf("Xiao Hong's age is %d.\n", HONG_AGE);

return 0


--------------------- 
作者:Hugoool 
来源:优快云 
原文:https://blog.youkuaiyun.com/u014170067/article/details/53561821 
版权声明:本文为博主原创文章,转载请附上博文链接!

### C# 中 `#undef` 指令的用途和使用方法 在 C# 中,`#undef` 是一种预处理指令,用于取消定义之前通过 `#define` 定义的符号。预处理指令在编译前由编译器处理,通常用于条件编译或控制代码的包含状态。 #### 用途 - **取消定义宏**:可以使用 `#undef` 来移除某个符号的定义,这样后续的条件编译指令(如 `#if`)将不再识别该符号为已定义。 - **控制代码编译**:通过动态地定义或取消定义某些符号,可以在不同的构建配置中启用或禁用特定的代码块。 #### 使用方法 1. **基本语法** ```csharp #undef SYMBOL_NAME ``` 其中 `SYMBOL_NAME` 是要取消定义的符号名称。 2. **注意事项** - `#undef` 必须出现在文件的顶部(即在任何其他语句之前),除了 `#define` 和其他预处理指令。 - 如果符号未被定义,则 `#undef` 不会产生任何效果。 3. **示例** 下面是一个简单的示例,展示了如何使用 `#undef` 来取消定义一个符号,并根据该符号的存在与否来控制代码的编译: ```csharp #define DEBUG_MODE #undef DEBUG_MODE // 取消定义 DEBUG_MODE class Program { static void Main() { #if DEBUG_MODE Console.WriteLine("Debug mode is enabled."); #else Console.WriteLine("Debug mode is disabled."); #endif } } ``` 在这个例子中,`DEBUG_MODE` 首先被定义,然后又被取消定义。因此,在 `#if DEBUG_MODE` 条件下,代码块不会被编译,程序会输出 "Debug mode is disabled."。 4. **与条件编译结合使用** `#undef` 常常与 `#define` 和 `#if` 结合使用,以实现灵活的条件编译逻辑。例如,可以根据不同的构建配置(调试模式、发布模式等)启用或禁用某些功能。 ```csharp #define FEATURE_A #undef FEATURE_A // 取消定义 FEATURE_A class Program { static void Main() { #if FEATURE_A Console.WriteLine("Feature A is enabled."); #else Console.WriteLine("Feature A is disabled."); #endif } } ``` 在这个例子中,`FEATURE_A` 被定义后又被取消定义,因此程序会输出 "Feature A is disabled."。 5. **实际应用场景** - **多平台支持**:在开发跨平台应用程序时,可能会根据目标平台定义不同的符号,以便启用或禁用特定于平台的功能。 - **功能开关**:可以通过定义或取消定义某些符号来快速切换功能模块,方便进行测试或部署不同版本的应用程序。 6. **总结** `#undef` 是 C# 中的一个有用的预处理指令,允许开发者动态地管理符号的定义状态,从而控制代码的编译行为。通过合理使用 `#undef`,可以提高代码的灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值