gcc 在数组初始值设定项中没有出现额外逗号错误

use*_*192 1 c grammar gcc initialization list-initialization

这是一个例子:

int main () 
{
  int a[] = {1, 2, 3,};
}
Run Code Online (Sandbox Code Playgroud)

,注意后面的额外内容3-Wall即使一切都没有警告。我在阅读一些coreutils代码时注意到这一点,这些代码似乎在数组的最后一个元素后面有一个逗号。这个 UB 是实现定义的还是按原样就可以?

Vla*_*cow 5

根据 C(和 C++)语法,这样的初始化是正确的。

来自C标准

6.7.9 初始化语法

1 initializer:
    assignment-expression
    { initializer-list }
    { initializer-list , }
//...
Run Code Online (Sandbox Code Playgroud)

您甚至可以用这种方式初始化标量对象,例如

int x = { 10, };
Run Code Online (Sandbox Code Playgroud)

请注意,在 C23 中,您可以使用空大括号初始化对象(包括可变长度数组),例如

int x = {};
Run Code Online (Sandbox Code Playgroud)

或者

int n = 4;
int a[n] = {};
Run Code Online (Sandbox Code Playgroud)