宏 #define 和枚举 enum

1. 问题

问题来源于在看源码 #include <dirent.h>时看到如下代码,在代码enum中为什么还需要宏定义# define DT_DIR DT_DIR
宏和枚举区别在哪里?

在这里插入图片描述

2. 宏和枚举

2.1 宏定义

c++中宏定义仅仅是在在预处理阶段进行简单的文本替换。一些常见的用法如下

#define PI 3.14159265              // 定义一个符号常量
#define SQUARE(x) ((x) * (x))      // 定义一个宏函数

// 使用宏定义
int radius = 5;
double area = PI * SQUARE(radius);

// 条件编译
#ifdef DEBUG
    // 在调试模式下执行的代码
#endif

2.2 枚举

enum是一种用户自定义的数据类型。本质上来讲,不使用枚举也能完成c/c++中所有代码,只是枚举便于理解与维护。

  1. 增加可读性: 枚举为整数赋予了有意义的名字,从而增加了代码的可读性。代替使用数字常量,枚举允许你使用有意义的名称,使代码更容易理解。
// 使用枚举
enum Color { RED, GREEN, BLUE };
Color myColor = RED;

// 不使用枚举
int red = 0;
int green = 1;
int blue = 2;
int myColor = red;
  1. 类型安全: 枚举在编译时进行类型检查,这有助于避免错误的值分配。如果你尝试将一个不在枚举列表中的值分配给枚举变量,编译器会发出警告或错误。
enum Color { RED, GREEN, BLUE };
Color myColor = 42; // 编译器通常会警告或报错

2.3 区别

  1. #define宏常量是在预编译阶段进行简单替换,枚举常量则是在编译的时候确定其值。
  2. 枚举可以自增1,这样不用每一个值都定义,而宏必须每个值都定义。
  3. 枚举是一个集合,代表一类值方便使用,而宏不能形成集合。
  4. 枚举是变量,当你声明一个枚举变量Color s ;时会占用空间(通常4字节)。
    在这里插入图片描述

最后

回到文章最开始的问题,为什么要在枚举里面定义宏?经过实际测试,这里的宏定义对代码本身没有任何影响,不排除有一些类似于#ifdef DT_DIR的用法。

参考链接

【C/C++】枚举enum与#define 宏的区别?
C++ 枚举(enum)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值