使用否定枚举的优点是什么?

时间:2010-04-26 03:06:40

标签: enums llvm

LLVM的万花筒解析器/ AST示例中,枚举被赋予所有负值。为什么减号?

enum Token {
  tok_eof = -1,
  // commands
  tok_def = -2, tok_extern = -3,
  // primary
  tok_identifier = -4, tok_number = -5
};

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我认为使用这些负值只是表示代码中特殊标记的一种方式。

在示例代码中,有效标记为0到255,因此超出此范围的任何值都可用于特殊标记,如tok_eof。因此,因为0到255不能用于枚举,所以他们选择使用负值,尽管它们可以使用256,257,258等。负值看起来比256,257,258 IMO更加原文。