GCC中数组初始化列表末尾多逗号无报错:是UB、实现定义还是合法?
数组初始化列表末尾的逗号是否合法?
这是完全符合C标准的合法语法,既不属于未定义行为(UB),也不是实现定义行为。
具体说明:
- 从C99标准开始,就明确允许初始化列表的最后一个元素之后尾随逗号,后续的C11、C18乃至最新的C23标准都延续了这个规定。
- 这种写法在实际项目中很实用:比如往列表末尾新增元素时,不需要修改上一行代码(不用给前一个元素补逗号),降低了出错概率;同时也能让版本控制系统的变更记录更清晰,不会因为修改上一行产生额外的diff。
- GCC开启
-Wall不发出警告,是因为这完全符合标准语法,不属于需要提醒的可疑代码。像coreutils这类成熟项目常用这种写法,核心目的就是提升代码的可维护性。
示例代码:
int main () { int a[] = {1, 2, 3,}; }
内容的提问来源于stack exchange,提问作者user129393192
相关产品推荐
相关产品推荐

