数组的列表初始化方式:C和C++的不同处理

今天在编译WinDump时,把一个c文件改为cpp,其中以前的一个定义和初始化是:

static struct protoidlist {
	u_char protoid[5];
	const char *name;
}  protoidlist[] = {
	{{ 0x00, 0x00, 0x0c, 0x01, 0x07 }, "CiscoMLS" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x00 }, "CiscoCDP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x01 }, "CiscoCGMP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x03 }, "CiscoVTP" },
	{{ 0x00, 0xe0, 0x2b, 0x00, 0xbb }, "ExtremeEDP" },
	{{ 0x00, 0x00, 0x00, 0x00, 0x00 },NULL }
};

 用VC6编译通过。

 

改为cpp文件后,编译失败,错误提示是:

  error C2552: 'protoidlist' : non-aggregates cannot be initialized with initializer list

 

经过测试,发现改成

static struct protoidlist {
	u_char protoid[5];
	const char *name;
}  protoidlist[] = {
	{{ 0x00, 0x00, 0x0c, 0x01, 0x07 }, "CiscoMLS" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x00 }, "CiscoCDP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x01 }, "CiscoCGMP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x03 }, "CiscoVTP" },
	{{ 0x00, 0xe0, 0x2b, 0x00, 0xbb }, "ExtremeEDP" },
	{{ 0x00, 0x00, 0x00, 0x00, 0x00 },NULL }
};

编译就没有问题。
 

你可能感兴趣的:(C++,c,C#)