1

私は得ています:

致命的なエラー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;

誰かが私がどこで間違っているのか見ることができますか?

4

2 に答える 2

4

コンパイルの前に前処理が行われます。つまりconst int TOTAL = 16;、前処理中にコンパイル時の概念 (つまり ) を使用することはできません。プリプロセッサは、プログラム内の変数を認識しません ( const.

#defineWug が提案したように、定数にも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);
于 2012-07-19T13:42:05.723 に答える
2

試す

#define V2 256

それ以外の

const int V2 = 256;

編集: 通常の分岐ではなく、プリプロセッサ マクロを実行しているのには正当な理由がありますよね?

編集 2: 他の誰かが指摘したように、プリプロセッサは sizeof ステートメントを受け入れません。これらはコンパイラによって処理されるためです。あなたのオプションは、(プリプロセッサのものとは対照的に) プログラムの if ステートメントを使用するか、サイズ式の実際の値を使用することです (これにはサイズのハードコーディングが含まれます。ただし、これは UINT32 であるため、これまでにないと思います4以外であること。

于 2012-07-19T13:34:06.583 に答える