3

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

枚举令牌 {
  tok_eof = -1,
  // 命令
  tok_def = -2,tok_extern = -3,
  // 基本的
  tok_identifier = -4,tok_number = -5
};

4

2 回答 2

3

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

于 2010-04-26T03:18:34.783 回答
2

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

在示例代码中,有效标记为 0 到 255,因此超出此范围的任何值都可用于特殊标记,如 tok_eof。因此,由于 0 到 255 不能用于枚举,因此他们选择使用负值,尽管他们可以使用 256、257、258 等。负值似乎比 256、257、258 IMO 更直观。

于 2010-04-26T03:15:45.090 回答