struct initializer,使用visual studio的typedef

Dav*_*eau 5 c visual-studio

我想知道为什么以下不适用于Visual Studio

typedef struct {
    float x, y;
} complexf;

typedef union {
    complexf f;
    long long d;
} rope;

int main(void)
{
    complexf a;
    rope z = {a};
}
Run Code Online (Sandbox Code Playgroud)

错误是在线绳z = {a},无法从complexf转换为float.如果union的第一个成员不是typedef,那么它可以工作.这是编译器错误,还是C的黑暗边缘?

Chr*_*oph 7

ANSI C标准(又名C89),3.5.7:

具有静态存储持续时间的对象的初始值设定项中的所有表达式或具有聚合或联合类型的对象的初始化列表中的所有表达式都应为常量表达式.

此限制的后半部分已在C99中删除,但VS未正确支持.