なぜこれが起こるのか分かりません。私は非常に複雑な構造、共用体、両方の名前のないバージョン、静的変数などを使用しています...しかし、これはうまくいくはずです。デバッグを 1 日行った後、問題を次のコードに絞り込みました。私は -fms-extensions を使用していますが、これはこの状況ではうまく機能しないようです:
//main.c
//Why does y get set to 0 in the case of 'Breaks'?
//Compile with gcc -fms-extensions main.c
#include <stdio.h>
struct Base {
int x;
int y;
};
struct Extend {
union {
int X;
struct Base;
};
};
struct AlsoExtend {
struct Base;
int z;
};
static struct Extend Works = {
.x = 5,
.y = 3,
//.X = 2
};
static struct Extend Breaks = {
.x = 5,
.y = 3,
.X = 2
};
static struct AlsoExtend AlsoWorks = {
.x = 5,
.y = 3,
.z = 69
};
int main(int argc, char** argv) {
printf("Works: x:%d y:%d X:%d\n", Works.x, Works.y, Works.X);
printf("Breaks: x:%d y:%d X:%d\n", Breaks.x, Breaks.y, Breaks.X);
printf("AlsoWorks: x:%d y:%d z:%d\n", AlsoWorks.x, AlsoWorks.y, AlsoWorks.z);
return 0;
}