在LLVM的万花筒解析器/ AST示例中,枚举被赋予所有负值。为什么减号?
enum Token { tok_eof = -1, // commands tok_def = -2, tok_extern = -3, // primary tok_identifier = -4, tok_number = -5 };
答案 0 :(得分:3)
带枚举的常见C惯用法是使用负值表示一组条件,使用正值表示另一组。例如,来自解析器的错误条件可能都是正值,而正常条件具有所有负值,并且可能为零是“未定义”情况。因此,在您的代码中,任何错误的测试都与tok >= 0
一样简单。
答案 1 :(得分:2)
我认为使用这些负值只是表示代码中特殊标记的一种方式。
在示例代码中,有效标记为0到255,因此超出此范围的任何值都可用于特殊标记,如tok_eof。因此,因为0到255不能用于枚举,所以他们选择使用负值,尽管它们可以使用256,257,258等。负值看起来比256,257,258 IMO更加原文。