Sent to you by iveney via Google Reader:
晚上看了两页 The Art of Unix Programming,其中提到了一个我以前一直感觉困惑的地方:
在我看过的 C/C++ 语言程序代码中,为什么有的列表初始化时在最后元素后会加逗号",",而有的不会?
例如:int[] a = { 1, 2, 3, };
书中的原话倒不是讨论逗号该不该加,而是说到了这样做能带来的好处:
A good example is C accommodating an extra comma at the end of an array initializer list, which makes both editing and machine generation of array initializers much easier.
-- The Art of Unix Programming (TAOUP) Ch8.3.1
哦,虽然我一直体会到这样做的好处(尤其当列表成员又臭又长且要经常修改时),也晓得这样做不会引起编译错误,但我经常是在代码 stable 之后将最后的逗号去掉——原因无它,不确定这样做是不是没有问题,那么还是尽量避免吧。今天忽然看到 TAOUP 提到这个,我就好奇:到底是 C/C++ 标准允许这样做呢?还是编译器的实现大部分支持这样做?于是就查了一下。
结果让我很开心,C/C++ 标准中就允许这样做:
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
-- ISO/IEC 9899:1999 (C99) Ch6.7.8 §1initializer-clause:
assignment-expression
{ initializer-list ,opt }
{ }
-- ISO/IEC 14882:1998 (C++98) Ch8.5 §1
K&R 中也用非常简短的一句话提到了这个特性:
A list may end with a comma, a nicety for neat formatting.
-- The C Programming Language (K&R) Appendix 8.7
这意味着(C/C++ 语言中)在元素列表最后加上一个逗号是一件非常安全的事情,看来我以后不必再考虑删除列表最后那个逗号了,这样能省却我很多麻烦。
延伸阅读:在其它编程语言中,是否支持这样做呢?Arrays: additionnal commas 这篇文章进行了一个很有意思的讨论。
Things you can do from here:
- Subscribe to Solrex Shuffling using Google Reader
- Get started using Google Reader to easily keep up with all your favorite sites
No comments:
Post a Comment