ここでも、32ビットアプリを64ビットに移植します。下記のC_ASSERTステートメントで負の添え字エラーが発生します。
C_ASSERT (sizeof(somestruct) == some#define);
http://support.microsoft.com/kb/68475の記事も読みましたが、この場合の修正方法がわからないのです。
ヘルプをいただければ幸いです。
前もって感謝します。
ここでも、32ビットアプリを64ビットに移植します。下記のC_ASSERTステートメントで負の添え字エラーが発生します。
C_ASSERT (sizeof(somestruct) == some#define);
http://support.microsoft.com/kb/68475の記事も読みましたが、この場合の修正方法がわからないのです。
ヘルプをいただければ幸いです。
前もって感謝します。
C_ASSERT
マクロは次のように定義されていると思います。
#define C_ASSERT(x) typedef char C_ASSERT_ ## __COUNTER__ [(x) ? 1 : -1];
これはコンパイル時のアサーションです。コンパイル時の式x
が true の場合、これは次のように展開されます。
typedef char C_ASSERT_1[1];
typenameC_ASSERT_1
が型のエイリアスであることを宣言しますchar[1]
( 1 の配列char
)。逆に、式x
が false の場合、次のように展開されます。
typedef char C_ASSERT_1[-1];
負のサイズの配列型を持つことはできないため、これはコンパイラ エラーです。
したがって、問題は式sizeof(somestruct) == some#define
が false であることです。つまり、 のサイズがsomestruct
コードが期待するものではありません。これを修正する必要があります -- のサイズを変更するかsomestruct
、 の値を変更しsome#define
て、これによって何も壊れないようにします。