我想为错误处理创建负值的枚举列表,因此<0是错误,并且>=0对于某些函数是有效的:

int f() {
  if (someerror())
    return ERR_TYPE_2;
  else
    return 0;
}

main() {
  if (f() < 0) blow_up(); 
  else profit(); 
}

我知道,默认情况下,C(enum)中的枚举从0开始计数,I could对它们的赋值方式如下:

enum {
  ERR_TYPE_1 = -1,
  ERR_TYPE_2 = -2,
  ERR_TYPE_3 = -3
}

或者,通过从枚举永远不会达到的任意负值开始,"自动"获得任意的负枚举值:

enum {
  ERR_TYPE_1 = -100,
  ERR_TYPE_2 // -99
  ERR_TYPE_3 // -98 ...
}

Question:有没有办法告诉enum-1开始计算负数,而不是使用上面的方法?

针对 comments 者的更新:

我不反对硬编码的错误值,事实上这就是我通常做的(作为定义或枚举).

这个问题实际上是关于Cofficially在一些未知的语法糖中是否支持负枚举,这些语法糖在一些搜索-fu之后是不会出现的.

推荐答案

你想要的是不可能的.没有显式赋值的枚举标识符值必须比前一个标识符多1,或者第一个标识符值为0.

这在关于枚举说明符的C standard节的第6.7.2.2p3节中有详细说明:

如果第一个枚举数具有 否=,则其枚举常量的值为0.每个后续枚举数不带= 将其枚举常量定义为 将前一个枚举常量的值加1.

虽然编译器可能会支持不同的排序作为扩展,但我不知道有任何支持这种特性的.

C++相关问答推荐

如何用C(使用两个s补数算术的32位程序)计算

括号中的堆栈实现错误问题

在#include中使用C宏变量

使用NameSurname扫描到两个单独的字符串

核心转储文件中出现奇怪的大小变化

ESP32在vTaskDelay上崩溃

将常量转换为指针会增加.数据大小增加1000字节

在C++中使用函数指针的正确语法

函数内的局部字符指针

在基本OpenGL纹理四边形中的一个三角形中进行渲染

FRIDA-服务器成为端口扫描的目标?

For循环中的变量行为不符合预期.[C17]

在txt文件中找到指定的字符串,并从数字中减go 相同的值

关于scanf()和空格的问题

指向不同类型的指针是否与公共初始序列规则匹配?

C";中的ANN运行时判断失败#2-变量outputLayer;周围的堆栈已损坏.运行后出错

正在try 理解C++中的`正在释放的指针未被分配‘错误

存储和访问指向 struct 的指针数组

分配给静态变量和动态变量的位置之间有区别吗?

Clang 是否为内联汇编生成了错误的代码?