数组的列表初始化方式:C和C++的不同处理
今天在编译WinDump时,把一个c文件改为cpp,其中以前的一个定义和初始化是:static struct protoidlist {u_char protoid;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;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 }};编译就没有问题。
页:
[1]