为什么我不能在括号中包装初始化列表?

时间:2014-06-29 16:57:35

标签: c arrays

我通常会声明并初始化一个整数数组,如下所示:

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

当然,人们通常没有理由将列表括在括号中,但现在我很好奇 - 为什么不能我们在这里使用括号?

2 个答案:

答案 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在你的帖子中提到的,这不是一个有效的语法!

是的,根据你现在的想法,你只是提供了一种新的解体方式,实际上是根据标准设定的,不能根据自己的目的进行修改,并按照自己的意愿进行修改。思。

所以,标准说你必须只使用{}这个,没有额外()以上或任何没有标准的地方。它们都是针对每一个定义的语法,因此给出了编译器错误,如果不遵守!