You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC中数组初始化列表末尾多逗号无报错:是UB、实现定义还是合法?

数组初始化列表末尾的逗号是否合法?

这是完全符合C标准的合法语法,既不属于未定义行为(UB),也不是实现定义行为。

具体说明:

  • 从C99标准开始,就明确允许初始化列表的最后一个元素之后尾随逗号,后续的C11、C18乃至最新的C23标准都延续了这个规定。
  • 这种写法在实际项目中很实用:比如往列表末尾新增元素时,不需要修改上一行代码(不用给前一个元素补逗号),降低了出错概率;同时也能让版本控制系统的变更记录更清晰,不会因为修改上一行产生额外的diff。
  • GCC开启-Wall不发出警告,是因为这完全符合标准语法,不属于需要提醒的可疑代码。像coreutils这类成熟项目常用这种写法,核心目的就是提升代码的可维护性。

示例代码:

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

内容的提问来源于stack exchange,提问作者user129393192

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:34:56