C语言中能否让enum自动向下计数生成负数值?
C语言负数值枚举的语法糖问题
结论:C语言标准里没有官方语法糖能让枚举自动从-1开始向下递增计数
枚举的默认赋值规则
C语言里枚举成员的自动赋值逻辑是固定的:
- 第一个未手动赋值的成员,默认值为0;
- 后续未手动赋值的成员,值为前一个成员的值加1。
所以如果想得到-1、-2、-3...这样的错误码序列,只能靠手动赋值实现,比如:
enum ErrorCodes { ERR_INVALID_ARG = -1, ERR_OUT_OF_MEM = -2, ERR_IO_FAILURE = -3, // 其他错误码依次手动赋值 };
要是你不想逐个写负数,也可以反过来从大负数开始定义,让它自动递增(但错误码的顺序会反过来):
enum ErrorCodes { ERR_CRITICAL = -10, // 最严重的错误 ERR_IO_FAILURE, // 自动变为-9 ERR_OUT_OF_MEM, // 自动变为-8 ERR_INVALID_ARG // 自动变为-7 };
替代简化方案
如果觉得手动写负数麻烦,可以用预处理器宏自己实现类似“语法糖”的效果:
#define ERR(n) (-n) enum ErrorCodes { ERR_INVALID_ARG = ERR(1), ERR_OUT_OF_MEM = ERR(2), ERR_IO_FAILURE = ERR(3), // 按1、2、3的顺序定义即可,宏会自动转成负数值 };
内容的提问来源于stack exchange,提问作者KJ7LNW
相关产品推荐
相关产品推荐

