コンパイラの警告 (レベル 1) C4742
'variable' の配置が 'file1' と 'file2' で異なります: number1 と number2
2 つのファイルで参照または定義された外部変数のアラインメントが、それらのファイル内で異なっています。
解説
この警告は、file1 内の変数の alignof
が、file2 内の変数の alignof
と異なっていることがコンパイラによって検出されると発生します。 これは、異なるファイルで変数を宣言するときに互換性のない型を使用することによって、または、異なるファイルで一致しない #pragma pack
を使用することによって発生する可能性があります。
この警告を解決するには、同じ型定義を使用するか、それらの変数にそれぞれ異なる名前を使用します。
詳細については、pack
および alignof
演算子に関するページを参照してください。
例
これは、型を定義する最初のファイルです。
// C4742a.c
// compile with: /c
struct X {
char x, y, z, w;
} global;
次の例では C4742 が生成されます。
// C4742b.c
// compile with: C4742a.c /W1 /GL
// C4742 expected
extern struct X {
int a;
} global;
int main() {
global.a = 0;
}