LLVMの万華鏡パーサー/AST の例では、enum にすべて負の値が与えられます。なぜマイナス記号なのですか?
列挙型トークン { tok_eof = -1, // コマンド tok_def = -2、tok_extern = -3、 // 主要な tok_identifier = -4、tok_number = -5 };
列挙型の一般的なCイディオムは、負の値を使用して1つの条件のセットを意味し、正の値を使用して別のセットを意味することです。たとえば、パーサーからのエラー条件はすべて正の値であるのに対し、通常の条件はすべて負の値である可能性があり、ゼロは「未定義」の場合である可能性があります。したがって、コードでのエラーのテストは、と同じくらい簡単tok >= 0
です。
これらの負の値の使用は、コード内の特別なトークンを示すための単なる方法であると思います。
サンプルコードでは、有効なトークンは0〜255であるため、この範囲外の値は、tok_eofなどの特別なトークンに使用できます。したがって、列挙型に0〜255を使用できないため、256、257、258などを使用できたとしても、負の値を使用することを選択しました。負の値は、256、257、258IMOよりも初期のように見えます。