下面是一个例子:
int main () { int a[] = {1, 2, 3,}; }
请注意3之后的额外,。即使使用-Wall和所有东西也没有警告。我在阅读一些coreutils代码时注意到了这一点,这些代码似乎在数组的最后一个元素后有一个逗号。这是UB、实现定义的,还是很好的?
3
,
-Wall
coreutils
nxagd54h1#
根据C(和C++)语法,这样的初始化是正确的。C标准6.7.9初始化语法您可以初始化这样一种方式,甚至标量对象,例如
int x = { 10, };
请注意,在C23中,您可以使用空括号初始化对象(包括可变长度数组),例如
int x = {};
或
int n = 4; int a[n] = {};
uxh89sit2#
很好。C标准允许。
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'; }
3条答案
按热度按时间nxagd54h1#
根据C(和C++)语法,这样的初始化是正确的。
C标准
6.7.9初始化语法
您可以初始化这样一种方式,甚至标量对象,例如
请注意,在C23中,您可以使用空括号初始化对象(包括可变长度数组),例如
或
uxh89sit2#
很好。C标准允许。
l7wslrjt3#
不仅是声明,修改时也可以用
,
替换;
(下面例子中的struct)最后三行: