明确将C / C ++枚举从0开始的原因

问题描述

我知道标准指出,如果您不指定第一个元素的值,则枚举的起始值将默认为0
但是例如在Linux内核源代码中,我数十次遇到了奇怪的声明。例如numa_faults_stats

enum numa_faults_stats {
    NUMA_MEM = 0,NUMA_CPU,NUMA_MEMBUF,NUMA_CPUBUF
};

将此枚举的第一个元素显式设置为0有什么需要?

Related post

解决方法

在C和C ++中,有很多关于各种事物的规则:这是其中之一。有时,为了清楚起见,最好是明确的。

另一种常见的用法是在函数原型中使用变量名(只需要类型)。还有一种是用两种语言的return 0;中的main。在C ++ publicprivate中显式使用classstruct是另一种方法。

,

您可以使用枚举,而不必关心它的值,就像仅使用它们之间的互补关系一样。但是有时候它的价值很重要。您可以将is用作数组的索引。例如。

 struct NUMA Numa[N];
 Numa[NUMA_MEM];
 Numa[NUMA_CPU];

在这种情况下,明确地赋值是绝对好的主意,即使它默认为相等也是如此。您强调它的值在代码中有用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...