枚举变量作为参数传递时,“打印”枚举变量名字技巧

#define MY_S(x) ({MY_LOGD("vicentsss %s",#x); (x);}) //打印枚举名,并返回枚举值
void checkExit(const IMetadata *meta, int tag)
checkExit(&(rvResult[i].meta), MY_S(MTK_COLOR_CORRECTION_MODE ));

<think>我们使用枚举类型定义一组常量,然后声明枚举变量并赋值,最后使用printf打印枚举变量的值。注意:枚举变量存储的是整数值,所以我们可以使用%d来打印其数值。如果希望打印枚举常量对应的名称(字符串),C语言没有直接支持,但我们可以通过自己编写映射函数来实现。根据引用[1]中的示例,枚举常量本质上是整数,默认从0开始递增。因此,我们可以将枚举变量视为整数,用%d格式打印。步骤:1.定义枚举类型2.声明枚举变量并赋值3.使用printf打印枚举变量的整数值4.(可选)如果需要打印字符串形式的枚举常量名,可以写一个switch-case函数下面给出两个示例:示例1:打印枚举变量的整数值示例2:打印枚举变量对应的字符串名称注意:枚举变量赋值可以直接赋值为枚举常量,也可以赋值为整数(但要注意类型安全,最好使用枚举常量)。</think>### C语言枚举变量赋值与打印详解 在C语言中,枚举变量本质上是整数常量,但通过命名提高了代码可读性。以下是枚举变量的赋值和打印方法: #### 基本赋值与打印 ```c #include <stdio.h> // 定义枚举类型 enum Weekday { Monday, // 默认值0 Tuesday, // 1 Wednesday, // 2 Thursday, // 3 Friday, // 4 Saturday, // 5 Sunday // 6 }; int main() { // 声明并初始化枚举变量 enum Weekday today = Wednesday; // 直接赋枚举常量 // 打印枚举变量的整数值 printf("数值形式: %d\n", today); // 输出: 2 // 打印枚举常量本身的值 printf("Wednesday的值: %d\n", Wednesday); // 输出: 2 return 0; } ``` #### 显式赋值枚举常量 ```c enum StatusCode { OK = 200, NOT_FOUND = 404, SERVER_ERROR = 500 }; int main() { enum StatusCode response = NOT_FOUND; printf("HTTP状态码: %d\n", response); // 输出: 404 return 0; } ``` #### 打印枚举名称(需要自定义映射) ```c #include <stdio.h> enum Color { RED, GREEN, BLUE }; // 将枚举值转为字符串的函数 const char* colorToString(enum Color c) { switch(c) { case RED: return "红色"; case GREEN: return "绿色"; case BLUE: return "蓝色"; default: return "未知颜色"; } } int main() { enum Color myColor = GREEN; // 打印枚举值和名称 printf("颜色值: %d\n", myColor); // 输出: 1 printf("颜色名称: %s\n", colorToString(myColor)); // 输出: 绿色 return 0; } ``` #### 枚举变量赋值规则 1. **直接赋枚举常量**(推荐) ```c enum Weekday day = Friday; // 正确 ``` 2. **赋整数值**(编译器可能警告) ```c enum Weekday day = 4; // 等价于Friday,但不推荐 ``` 3. **枚举变量间赋值** ```c enum Weekday day1 = Thursday; enum Weekday day2 = day1; // 正确 ``` #### 使用注意事项 1. **类型安全**:枚举变量只能存储定义范围内的值 2. **内存占用**:枚举变量大小等于`int`(通常4字节) 3. **作用域**:枚举常量具有文件作用域(可在函数外定义) 4. **打印限制**:`printf`无法直接输出枚举名,需自定义转换函数 #### 综合示例 ```c #include <stdio.h> // 定义带显式赋值的枚举 enum LogLevel { DEBUG = 1, INFO = 2, WARNING = 3, ERROR = 4 }; // 枚举值转字符串函数 const char* levelToString(enum LogLevel level) { switch(level) { case DEBUG: return "DEBUG"; case INFO: return "INFO"; case WARNING: return "WARNING"; case ERROR: return "ERROR"; default: return "UNKNOWN"; } } int main() { // 声明并赋值 enum LogLevel currentLevel = WARNING; // 打印数值和名称 printf("日志级别值: %d\n", currentLevel); printf("日志级别名: %s\n", levelToString(currentLevel)); // 重新赋值 currentLevel = DEBUG; printf("新级别: %s (%d)\n", levelToString(currentLevel), currentLevel); return 0; } ``` 输出: ``` 日志级别值: 3 日志级别名: WARNING 新级别: DEBUG (1) ``` > **关键点**:枚举变量本质是整数常量,用`%d`格式打印其数值。如需打印名称,需自定义转换函数[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值