私は得ています:
致命的なエラーC1017:無効な整数定数式
次のコードを使用します。
#if V1>0
//do stuff
#endif
V1は、.cppファイルの先頭で次のように定義されています。
#define V3 UINT32
#define V4 sizeof(V3)
#define V1 (V2 % V4)
V2は次のように定義されています。
const int V2 = 256;
誰かが私がどこで間違っているのか見ることができますか?
私は得ています:
致命的なエラーC1017:無効な整数定数式
次のコードを使用します。
#if V1>0
//do stuff
#endif
V1は、.cppファイルの先頭で次のように定義されています。
#define V3 UINT32
#define V4 sizeof(V3)
#define V1 (V2 % V4)
V2は次のように定義されています。
const int V2 = 256;
誰かが私がどこで間違っているのか見ることができますか?
コンパイルの前に前処理が行われます。つまりconst int TOTAL = 16;
、前処理中にコンパイル時の概念 (つまり ) を使用することはできません。プリプロセッサは、プログラム内の変数を認識しません ( const
.
#define
Wug が提案したように、定数にもa を使用する代わりに、よりクリーンなソリューションは次のようになります。
typedef UINT32 TARGET_TYPE;
const int TARGET_TYPE_SIZE = sizeof(TARGET_TYPE);
const int TOTAL = 16;
const int NUM_BYTES = (TOTAL % TARGET_TYPE_SIZE);
試す
#define V2 256
それ以外の
const int V2 = 256;
編集: 通常の分岐ではなく、プリプロセッサ マクロを実行しているのには正当な理由がありますよね?
編集 2: 他の誰かが指摘したように、プリプロセッサは sizeof ステートメントを受け入れません。これらはコンパイラによって処理されるためです。あなたのオプションは、(プリプロセッサのものとは対照的に) プログラムの if ステートメントを使用するか、サイズ式の実際の値を使用することです (これにはサイズのハードコーディングが含まれます。ただし、これは UINT32 であるため、これまでにないと思います4以外であること。