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

时间:2013-09-30 10:35:11

标签: c++ c arrays

int x[1000] = {0, }; 

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

我的编译器报告错误

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

2 个答案:

答案 0 :(得分:1)

由于可能的重复问题一般是关于编程语言语法,所以这是C / C ++中的答案,特别是:

  

C11(ISO / IEC 9899:201x)§6.7.9初始化

     

语法

     

初​​始化:

     

赋值表达式

     

{initializer-list}

     

{initializer-list,}

我做了其余的事,请注意这里的逗号。

在C ++中,它类似,请注意逗号 opt ,这意味着可选的逗号。

  

C ++ 11(ISO / IEC 14882:2011)§8.5初始化程序[dcl.init]

     

声明者可以为声明的标识符指定初始值。标识符指定正在初始化的对象或引用。在8.5的其余部分中描述的初始化过程也适用于由其他语法上下文指定的初始化,例如使用参数表达式(5.2.2)初始化函数参数或初始化返回值(6.6.3)。

     

初​​始化:

     

= initializer-clause

     

(表达式列表)

     

初​​始化子句:

     

赋值表达式

     

{initializer-list, opt }

     

{}

     

初​​始化列表:

     

初​​始化子句

     

initializer-list,initializer-clause

答案 1 :(得分:1)

来自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来说,这绝对是合法的!