以下类型的声明是否完全有效
Is the following type of declaration perfectly valid?
int x[1000] = {0, };
这是关于初始化的,其中 出现 ,右侧没有操作数。
我的编译器报告错误。
认为它可能(?(与 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(。
初始 化:
= 初始值设定项子句
( 表达式列表 (
初始值设定项子句:
赋值表达式
{ 初始值设定项列表 ,选择 }
{ }
初始值设定项列表:
初始值设定项子句
初始值设定项列表 , 初始值设定项子句
相关文章:
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 模板签名解析为 void(void) 被 GCC 拒绝;这是否有效C++?
- 我如何知道作为参数的size_t在函数中是否有效?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 模板变量是否允许在多个翻译单元中并有效合并?
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 此递归模板类型定义是否有效C++?
- 将 C 函数转换为 C++ 以检查数字是否有效
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 如何检查输入是否有效?
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 堆分配对于大型块中的分页是否更有效?
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- 如何检查isupper(cstr)是否有效?