VisualStudio2010C和Ubuntu C之间的结构声明差异

VisualStudio2010C和Ubuntu C之间的结构声明差异,c,visual-studio-2010,C,Visual Studio 2010,我一直在努力学习Zed Shaw的“艰苦学习C”在线课程。我在VisualStudio2010中尝试使用c编译器编译ex17时遇到了一个问题。我总是从代码的第100行左右得到一个错误。然而,当我试图在使用Ubuntu虚拟机时编译完全相同的文件时,代码编译得很好。该错误是在以下代码中的“{.id”处生成的,编译器在“.”处生成错误。有人能解释为什么该错误发生在一个编译器中而不是另一个编译器中吗?既然它发生在windows环境中,将来如何避免它 void Database_create(struct

我一直在努力学习Zed Shaw的“艰苦学习C”在线课程。我在VisualStudio2010中尝试使用c编译器编译ex17时遇到了一个问题。我总是从代码的第100行左右得到一个错误。然而,当我试图在使用Ubuntu虚拟机时编译完全相同的文件时,代码编译得很好。该错误是在以下代码中的“{.id”处生成的,编译器在“.”处生成错误。有人能解释为什么该错误发生在一个编译器中而不是另一个编译器中吗?既然它发生在windows环境中,将来如何避免它

void Database_create(struct Connection *conn)
{
int i = 0;

for( i = 0; i < MAX_ROWS; i++) {
    // Make Prototype to initialize
    struct Address addr = {.id = i, .set = 0}; //Syntax error generated here
    // then assign it
    conn->db->rows[i] = addr;
        }
 }
void数据库\u创建(结构连接*conn)
{
int i=0;
对于(i=0;i数据库->行[i]=addr;
}
}

注意:无论是否激活C编译器开关,这都会在visual studio命令提示符中发生。

结构地址addr={.id=i、.set=0};
是C99构造-具体地说,
{.id=i、.set=0}
初始值设定项是“指定的初始值设定项”

<> P.McVC++一般不支持C99构造。在某些情况下,可以通过编译为C++来解决这一问题,因为C++中支持几种常见的C99特征(例如块中的语句允许的声明)。然而,指定的初始化器也不是C++的一部分。 您需要在Windows上使用支持C99的编译器(如MinGW的GCC),或者修改代码以与C90兼容。如果没有太多C99特定的内容,这可能不会太难:

struct Address addr = {0};
addr.id = i;

谢谢你的回答!你太棒了!