枚举的基本概念相比大家都有所了解了,但是我还是给大家简单说一下吧
在C/C++中,你可以使用enum关键字定义一个枚举类型,然后列出枚举常量的名称。每个枚举常量都有一个与之相关联的整数值,默认情况下,第一个枚举常量的值为0,后续的枚举常量依次递增。
enum Color {
RED, // 0
GREEN, // 1
BLUE, // 2
YELLOW =0 ,
ORANGE, //1
black //2
};
枚举常量的默认值是递增的整数序列,从0开始。如果你显式地为枚举常量赋值,
那么枚举会根据你赋值的常量开始依次递增
实战中使用到枚举的场景
比如我们定义一个枚举,用来做函数的返回值
typedef enum _OS_STATUS
{
OS_SUCCESS = 0,
OS_FAILED,
OS_TIMEOUT
} OS_STATUS;
OS_STATUS OS_MutexLock( OsMutex mutex );
这是我们定义的函数,当这个函数有很多状态时,我们如果用int为接收值,这不便于我们对代码的理解和管理,我们直接用枚举列出这个函数返回值:超时,成功或失败,阅读代码的时候对函数的返回值状态便一目了然, 但是你用int返回值就只能是0,1,2,对于别人对你代码的理解很不方便,也很不利于代码的管理.
就这么说可能你不是很能理解, 好像012也很容易记住啊,但是你要知道,真正的项目中这个枚举返回值可能会有几十个状态返回值,你用枚举把每个状态都列举出来,便一眼能看出这个函数这个程序目前的状态
下面的代码便于你理解枚举在作为函数的返回值得理解
如果你用int返回值,就只能用0 1 2在if里面判断, 但是你巧用枚举,通过使用枚举,可以更清晰地表达函数返回的状态,使代码的阅读和理解更加直观和方便。特别是在大型项目中,可能有多种不同的状态返回值,使用枚举可以更好地组织和管理这些状态,提高代码的可读性和可维护性。
typedef enum {
OS_SUCCESS = 0,
OS_FAILED,
OS_TIMEOUT
} OS_STATUS;
OS_STATUS OS_MutexLock(OsMutex mutex);
int main() {
OsMutex mutex;
OS_STATUS result = OS_MutexLock(mutex);
if (result == OS_FAILED) {
// 执行某些操作
}
return 0;
}
示例代码清晰地展示了如何定义枚举类型并将其用作函数的返回值类型,以及如何在主函数中使用枚举变量进行状态判断。这样的代码结构可以帮助其他开发者更快地理解函数的返回状态,并根据需要执行相应的操作。
再列举一个枚举作为参数传入函数的实战例子(函数被我精简了)
虽然说下面的函数参数可以用宏定义,但是我更喜欢用枚举来管理和便于后续增加代码业务
通过使用枚举,你可以定义不同的参数类型,并在函数中根据参数类型执行相应的操作。这种做法可以提高代码的可读性和可维护性,同时也方便了后续增加更多的参数类型。
typedef enum
{
BLE_LOCK_STATE,
BLE_VOLUME,
BLE_MODE,
...//蓝牙还有其他参数类型,可以根据需要继续添加
}send_state_e;
枚举用typedef后面习惯用_e作后缀,如果是结构体typedef后面习惯用_s作后缀.这算是个小经验之谈吧
bool ble_send_state(send_state_e type)
{
switch(type)
{
case BLE_LOCK_STATE:
// 执行针对BLE_LOCK_STATE的操作
break;
case BLE_VOLUME:
// 执行针对BLE_VOLUME的操作
break;
case BLE_MODE:
// 执行针对BLE_MODE的操作
break;
default:
return false;
break;
}
return true;
}
//函数引用时:
ble_send_state(BLE_LOCK_STATE);
这个便是执行BLE_LOCK_STATE作为参数调用函数的使用.
如果这篇文章对你有收益的话给我点个赞吧