【发布时间】:2015-05-19 21:45:45
【问题描述】:
跟进我的一个老问题 (Is there any relevance to an extra "," in the end of a brace initialization?)
函数声明和函数调用中的参数列表没有像大括号初始化那样对代码生成友好,是否有任何技术原因?
我的意思是:
没关系,多余的,被忽略:
int generated_array[] = {
1,
2,
3,
};
为了保持一致性,允许这样做不是也有意义吗?
int someFunc(
int v1,
int v2,
int v3,
){...}
int ret_val = someFunc(
1,
2,
3,
);
我看不出它会如何使编译变得更复杂,但也许有一些我没有想到的东西。我猜它实际上会稍微简化它。
当然,有人会说它不如大括号初始化有用,但应该存在这样的情况,如果允许的话,代码生成至少会简单一点。
【问题讨论】:
-
初始化列表中尾随逗号的理由是允许机器轻松生成大型静态数组。不过,实际上并没有机器生成大型函数参数列表的需要。
-
一旦我们去那里,为了保持一致性,我们必须允许
int a, b = 1, c = 6,;。 -
@hacks 我在回答中指出的 C99 基本原理解释它不仅仅是一个语法规则。
-
如果逗号操作符是这样工作的,那为什么不
a = b + c + d +;呢? -
@cleong 我猜这个区别只是历史原因,因为它允许机器生成初始化列表,这一定很常见。
标签: c++ c code-generation