int a [] = {1,2,};允许使用逗号逗号。任何特别的原因? [英] int a[] = {1,2,}; Weird comma allowed. Any particular reason?
问题描述
也许我不是来自这个星球,但在我看来,以下应该是语法错误:
Maybe I am not from this planet, but it would seem to me that the following should be a syntax error:
int a[] = {1,2,}; //extra comma in the end
但它不是。我感到惊讶,当这段代码编译在Visual Studio,但我已经学会了不信任MSVC编译器就C ++规则,所以我检查了标准,它 允许的标准以及。如果你不相信我,你可以看到8.5.1的语法规则。
But it's not. I was surprised when this code compiled on Visual Studio, but I have learnt not to trust MSVC compiler as far as C++ rules are concerned, so I checked the standard and it is allowed by the standard as well. You can see 8.5.1 for the grammar rules if you don't believe me.
为什么允许这样做?这可能是一个愚蠢的无用的问题,但我想让你了解为什么我问。如果它是一个一般语法规则的子情形,我会理解 - 他们决定不让一般语法更困难,只是在初始化列表的末尾不允许一个冗余的逗号。但不能,额外的逗号是显式 允许。例如,不允许在函数调用参数列表的末尾有一个多余的逗号(当函数 ...
时), which是正常的。
Why is this allowed? This may be a stupid useless question but I want you to understand why I am asking. If it were a sub-case of a general grammar rule, I would understand - they decided not to make the general grammar any more difficult just to disallow a redundant comma at the end of an initializer list. But no, the additional comma is explicitly allowed. For example, it isn't allowed to have a redundant comma in the end of a function-call argument list (when the function takes ...
), which is normal.
再次,是有任何特别的原因,这个冗余的逗号是显式 允许?
So, again, is there any particular reason this redundant comma is explicitly allowed?
推荐答案
这使得生成源代码更容易,也可以编写稍后可以轻松扩展的代码。考虑为以下内容添加额外条目所需的内容:
It makes it easier to generate source code, and also to write code which can be easily extended at a later date. Consider what's required to add an extra entry to:
int a[] = {
1,
2,
3
};
...您必须将逗号添加到现有行和添加新行。比较三个已经后面有逗号的情况,你只需要添加一行。同样,如果你想删除一行,你可以这样做,而不必担心它是否是最后一行,并且你可以重新排序行没有freetling用逗号。基本上,这意味着如何处理行的一致性。
... you have to add the comma to the existing line and add a new line. Compare that with the case where the three already has a comma after it, where you just have to add a line. Likewise if you want to remove a line you can do so without worrying about whether it's the last line or not, and you can reorder lines without fiddling about with commas. Basically it means there's a uniformity in how you treat the lines.
现在考虑生成代码。类似的东西(伪代码):
Now think about generating code. Something like (pseudo-code):
output("int a[] = {");
for (int i = 0; i < items.length; i++) {
output("%s, ", items[i]);
}
output("};");
无需担心您输出的当前项是第一个还是最后一个。更简单。
No need to worry about whether the current item you're writing out is the first or the last. Much simpler.
这篇关于int a [] = {1,2,};允许使用逗号逗号。任何特别的原因?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!