3

在 Visual Studio 2013 中,以下代码段会生成编译错误

错误 C2440:“正在初始化”:无法从“TestSubStruct”转换为“int”

#include <stdio.h>

typedef struct TestSubStruct {
    int test;
} TestSubStruct;

typedef struct TestStruct {
    TestSubStruct sub;
} TestStruct;

int main(int argc, char* argv[])
{
    TestSubStruct r = {0};
    TestStruct vp = { .sub = r}; // this line causes the error
    return 0;
}

这可以很容易地重写以便编译,但我想知道的是为什么代码不能按原样编译。它是否以某种方式违反了静态初始化器的规范?这只是 MSVC 的问题还是其他编译器也无法构建它?

编辑:从评论者看来,这是一个 MSVC 问题。在这种情况下,我的问题是:MSVC 2013 对静态初始化器的支持的确切限制是什么?

4

0 回答 0