以下类型的声明是否完全有效

Is the following type of declaration perfectly valid?

本文关键字:有效 是否 声明 类型      更新时间:2023-10-16
int x[1000] = {0, }; 

这是关于初始化的,其中 出现 ,右侧没有操作数。

我的编译器报告错误

认为它可能(?(与 CC++ 不同,我正在标记它们。

来自 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(。

初始 化:

= 初始值设定项子句

( 表达式列表 (

初始值设定项子句:

赋值表达式

{ 初始值设定项列表 ,选择 }

{ }

初始值设定项列表:

初始值设定项子句

初始值设定项列表 , 初始值设定项子句