1

理解を深めるための質問です。

次のコードがあるとします。

#define DEF 1,2,3
#if (DEF > 3)
#endif

私が正しければ、1 と 2 は影響のない式であり、3 のみがチェックされるため、if は常に true である必要があります。(これは、通常のC /C++ コードでは少なくとも当てはまるはずです)

でもそうですか、それとも 1 と 2 についても考えなければならない理由はありますか? いくつかのコードでそれを見ましたが、これが何らかの意味や影響を与える可能性があるかどうかはよくわかりません.

4

5 に答える 5

2

サンプルコードは厳密に準拠していません。

C11 から、6.10.1 パー。3 (条件付き包含、セマンティクス):

フォームの前処理ディレクティブ

# if 定数式改行グループopt

# elif 定数式改行グループopt

制御定数式がゼロ以外に評価されるかどうかを確認します

ただし6.6パー。3 (定数式、制約) は次のように述べています。

定数式には、代入、インクリメント、デクリメント、関数呼び出し、またはコンマ演算子が含まれていてはなりません。ただし、評価されない部分式に含まれている場合を除きます。115)

脚注 115 は次のとおりです。

sizeofor演算子のオペランドは、_Alignof通常は評価されません (6.5.3.4)。

于 2015-08-18T11:55:37.050 に答える