我应该使用{}或{0}初始化数组/结构吗?

时间:2014-12-13 17:53:45

标签: c initialization

我有一个微弱的阅读记忆,用于将结构/数组初始化为默认值的int x[4] = {};代码依赖于首次出现在gcc中的非标准(但广泛)扩展,以及正确的版本(正如标准中明确指出的那样)int x[4] = { 0 };

这是对的吗?

1 个答案:

答案 0 :(得分:6)

在C中,初始化列表的定义方式如下

initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }

在C ++中,它的定义方式如下

braced-init-list:
{ initializer-list ,opt }
{ }

正如您所看到的,C ++允许空的大括号初始化列表,而在C初始化列表中可能不会被省略。

所以你可以用C ++写作

int x[4] = {}; 

然而,在C中,这个定义不满足标准(尽管它可以是实现定义的语言扩展)。所以你必须写

int x[4] = { 0 };

在这两种情况下,数组的元素将被零初始化。