1. ホーム
  2. c++

ifで使用される未定義定数の値は何ですか?

2023-11-08 02:42:44

質問

私のプリプロセッサは、未定義の定数を0とみなして #if の条件を評価するために、未定義の定数は 0 であると仮定しているようです。

これは当てになるのでしょうか、それとも未定義の定数は未定義の動作をするのでしょうか?

どのように解決するのですか?

はい、頼ることができます。C99規格では§6.10.1 ¶3で規定されています。

マクロ展開と定義された単項演算子によるすべての置換が行われた後、残りのすべての識別子はpp-noteに置き換えられます。 演算子による置換が全て行われた後、残りの全ての識別子をpp-numberで置換します。 0

編集

すみません、C言語の質問かと思いました。それでも大したことはなく、C++の規格の相当する部分(§16.1 ¶4)には、次のように書かれています。

マクロ展開と定義された単項演算子によるすべての置換が実行された後、残りのすべての識別子 を除く、残りのすべての識別子とキーワードが実行されました。 truefalse は、pp-number に置き換えられます。 0

の扱いが違うだけです。 truefalse であり、C言語では特別な処理を必要としませんが、C++では前処理段階でも特別な意味を持ちます。