3

LLVMの万華鏡パーサー/AST の例では、enum にすべて負の値が与えられます。なぜマイナス記号なのですか?

列挙型トークン {
  tok_eof = -1,
  // コマンド
  tok_def = -2、tok_extern = -3、
  // 主要な
  tok_identifier = -4、tok_number = -5
};

4

2 に答える 2

3

列挙型の一般的なCイディオムは、負の値を使用して1つの条件のセットを意味し、正の値を使用して別のセットを意味することです。たとえば、パーサーからのエラー条件はすべて正の値であるのに対し、通常の条件はすべて負の値である可能性があり、ゼロは「未定義」の場合である可能性があります。したがって、コードでのエラーのテストは、と同じくらい簡単tok >= 0です。

于 2010-04-26T03:18:34.783 に答える
2

これらの負の値の使用は、コード内の特別なトークンを示すための単なる方法であると思います。

サンプルコードでは、有効なトークンは0〜255であるため、この範囲外の値は、tok_eofなどの特別なトークンに使用できます。したがって、列挙型に0〜255を使用できないため、256、257、258などを使用できたとしても、負の値を使用することを選択しました。負の値は、256、257、258IMOよりも初期のように見えます。

于 2010-04-26T03:15:45.090 に答える