gcc数组初始化器中没有额外的逗号错误

rbpvctlc  于 2023-06-21  发布在  其他
关注(0)|答案(3)|浏览(73)

下面是一个例子:

int main () 
{
  int a[] = {1, 2, 3,};
}

请注意3之后的额外,。即使使用-Wall和所有东西也没有警告。我在阅读一些coreutils代码时注意到了这一点,这些代码似乎在数组的最后一个元素后有一个逗号。这是UB、实现定义的,还是很好的?

nxagd54h

nxagd54h1#

根据C(和C++)语法,这样的初始化是正确的。
C标准
6.7.9初始化语法
您可以初始化这样一种方式,甚至标量对象,例如

int x = { 10, };

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

int x = {};

int n = 4;
int a[n] = {};
uxh89sit

uxh89sit2#

很好。C标准允许。

l7wslrjt

l7wslrjt3#

不仅是声明,修改时也可以用,替换;(下面例子中的struct)最后三行

typedef struct {
    int a;
    int b;
    char c;
} test;

int main(void)
{
    test hi = (test) {
        .a = 0,
        .b = 1,
        .c = 'a',
    };

    hi.a = 6,
    hi.b = 9,
    hi.c = 'r';
}

相关问题