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

use*_*607 4 c initialization

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

它是否正确?

Vla*_*cow 6

在C中,初始化列表按以下方式定义

initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
Run Code Online (Sandbox Code Playgroud)

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

braced-init-list:
{ initializer-list ,opt }
{ }
Run Code Online (Sandbox Code Playgroud)

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

所以你可以用C++编写

int x[4] = {}; 
Run Code Online (Sandbox Code Playgroud)

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

int x[4] = { 0 };
Run Code Online (Sandbox Code Playgroud)

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