今天在做Cici的一个Code review的时候,她的一个数组初始化用法让我有点疑惑,大体是这么用的:
char buffer[16] = {0};
她这段代码的目的倒是很好理解,就是把buffer初始化为全为0的内存空间,但是,如果让我这么做的话,我会用memset,而且很多其他程序员也会是这么做的。我自己在VS2010上试了下这种用法,确实也是全部初始化为0了。但仍然很困惑,不知道这种方式会不会有什么风险,于是查阅了一些资料。
在这篇博文中:http://blog.youkuaiyun.com/sibylle/article/details/2026915 对这种情况作了详尽的分析,在目前主流的编译器中,基本都支持这种设定,但是标准文档中却并没做类似规定,在IBM官方文档中http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/aryin.htm 也是这么说的,因此可不可以看成是一种不成文的标准呢?
尽管如此,我个人还是建议用memset来实现这个功能,因为如果过于依赖编译器的自动行为,难免会出现预料不到的情况。