我通常会声明并初始化一个整数数组,如下所示:
int a[3] = { 1, 2, 3}; // declares an array of 3 integers
但今天我发现将列表括在括号中,如下:
int a[3] = ( { 1, 2, 3} ); // gives compile time error
其中产生了以下编译器错误:
expected ';' before '}' token
invalid initializer
当然,人们通常没有理由将列表括在括号中,但现在我很好奇 - 为什么不能我们在这里使用括号?
答案 0 :(得分:8)
这根本不是有效的语法。以下是C99标准中语法的相关部分:
<强> [6.7] 强>
init-declarator: declarator declarator = initializer
<强> [6.7.8] 强>
initializer: assignment-expression { initializer-list } { initializer-list , }
答案 1 :(得分:3)
根据C语言规范,您的第二个声明无效。
你无法故意在任何地方使用()
!
正如Oli Charlesworth在你的帖子中提到的,这不是一个有效的语法!
是的,根据你现在的想法,你只是提供了一种新的解体方式,实际上是根据标准设定的,不能根据自己的目的进行修改,并按照自己的意愿进行修改。思。
所以,标准说你必须只使用{}
这个,没有额外()
以上或任何没有标准的地方。它们都是针对每一个定义的语法,因此给出了编译器错误,如果不遵守!