Enums 使用负枚举的优点是什么

Enums 使用负枚举的优点是什么,enums,llvm,Enums,Llvm,在的万花筒解析器/AST示例中,枚举被赋予所有负值。为什么是负号?枚举令牌{ enum Token { tok_eof = -1, // commands tok_def = -2, tok_extern = -3, // primary tok_identifier = -4, tok_number = -5 }; tok_eof=-1, //命令 tok_def=-2,tok_extern=-3, //初级的 tok_标识符=-4,tok_编号=-5 }; 我相信使用这些

在的万花筒解析器/AST示例中,枚举被赋予所有负值。为什么是负号?枚举令牌{ enum Token { tok_eof = -1, // commands tok_def = -2, tok_extern = -3, // primary tok_identifier = -4, tok_number = -5 }; tok_eof=-1, //命令 tok_def=-2,tok_extern=-3, //初级的 tok_标识符=-4,tok_编号=-5
};

我相信使用这些负值只是在代码中表示特殊标记的一种方式


在示例代码中,有效令牌的范围是0到255,因此任何超出此范围的值都可以用于特殊令牌,如tok_eof。因此,由于0到255不能用于枚举,因此他们选择使用负值,尽管他们本可以使用256、257、258等。负值似乎比256、257、258更具启发性。

枚举的一个常见C习惯用法是使用负值表示一组条件,使用正值表示另一组条件。例如,来自解析器的错误条件可能都是正值,而正常条件都是负值,零可能是“未定义”的情况。因此,在您的代码中,任何错误的测试都非常简单,就像
tok>=0

事实上,示例中说://如果是未知字符,lexer将返回标记[0-255],否则这些标记中的一个用于已知的东西。。因此,在本例中,正数将是标识符(在编译器的关键字等意义上,它不是“已知的东西”)。