int x[1000] = {0, };
这是关于初始化,其中 a出现在其右侧没有操作数。
我的编译器报告错误。
认为它可能(?)与C和C++不同,我标记了它们。
来自 ISO/IEC 9899:TC3 6.7.8 初始化
26 例 3
宣言
int y[4][3] = {
{ 1, 3, 5 },
{ 2, 4, 6 },
{ 3, 5, 7 },
};
是一个带全括号初始化的定义:1、3、5初始化y的第一行(数组对象y[0]),即y[0][0]、y[0][1]和y [0][2]。同样,接下来的两行初始化 y[1] 和 y[2]。初始化器提前结束,所以 y[3] 用零初始化。可以通过以下方式实现完全相同的效果
int y[4][3] = {
1, 3, 5, 2, 4, 6, 3, 5, 7
};
y[0] 的初始值设定项不以左大括号开头,因此使用了列表中的三个项目。类似地,接下来的三个依次用于 y[1] 和 y[2]。
所以至少对于 c99 它是绝对合法的!
由于可能的重复问题通常与编程语言语法有关,因此特别是 C/C++ 中的答案:
C11(ISO/IEC 9899:201x) §6.7.9 初始化
句法
初始化器:
赋值表达式
{初始化列表}
{初始化列表,}
我已经提交了其余的,请注意这里的逗号。
在 C++ 中,它是类似的,注意逗号opt,这意味着可选的逗号。
C++11(ISO/IEC 14882:2011)§8.5 初始化程序 [dcl.init]
声明者可以为被声明的标识符指定一个初始值。标识符指定正在初始化的对象或引用。8.5 其余部分中描述的初始化过程也适用于由其他句法上下文指定的初始化,例如使用参数表达式的函数参数的初始化(5.2.2)或返回值的初始化(6.6.3)。
初始化器:
= 初始化子句
(表达式列表)
初始化子句:
赋值表达式
{初始化列表,选择}
{ }
初始化列表:
初始化子句
初始化器列表,初始化器子句