在LLVM的万花筒解析器/AST 示例中,枚举被赋予所有负值。为什么是减号?
枚举令牌 { tok_eof = -1, // 命令 tok_def = -2,tok_extern = -3, // 基本的 tok_identifier = -4,tok_number = -5 };
枚举的一个常见 C 习惯用法是使用负值表示一组条件,使用正值表示另一组条件。例如,来自解析器的错误条件可能全是正值,而正常条件全是负值,也许零是“未定义”的情况。因此,在您的代码中测试任何错误就像tok >= 0
.
我相信使用这些负值只是在代码中表示特殊标记的一种方式。
在示例代码中,有效标记为 0 到 255,因此超出此范围的任何值都可用于特殊标记,如 tok_eof。因此,由于 0 到 255 不能用于枚举,因此他们选择使用负值,尽管他们可以使用 256、257、258 等。负值似乎比 256、257、258 IMO 更直观。