一行初始化C中的所有变量和未初始化的值

Ka-*_*Yip 4 c side-effects variable-initialization

在C语言中,是

int x, y, z = 0;
Run Code Online (Sandbox Code Playgroud)

和这个一样吗?

int x = 0;
int y = 0;
int z = 0;
Run Code Online (Sandbox Code Playgroud)

另外,如果我只是说,即使未初始化,int a;的值似乎也为零,但不是未定义的,如未初始化变量的值是什么?a

Sto*_*ica 5

不,两者不等同。

int x, y, z = 0;
Run Code Online (Sandbox Code Playgroud)

在这一行中x, 和y将具有不确定的值,而z被初始化为零。

不过,您可以将其保留在“一行”中,但代价是有些冗长:

int x = 0, y = x, z = y;
Run Code Online (Sandbox Code Playgroud)

现在,所有三个都使用相同的值(您给出的值x)进行初始化。要使用一个变量初始化另一个变量,所需要做的就是预先定义初始化器。即使在同一条线上也能正常工作。上述内容还允许您轻松更改所有变量的初始值。

或者,如果您发现以前的样式很难看,您可以将其分成两行:

int x, y, z;
x = y = z = 0;
Run Code Online (Sandbox Code Playgroud)

但现在是赋值,而不是初始化。

另外,如果我只是说,即使未初始化,int a;的值似乎也为零,但不是未定义的,如未初始化变量的值是什么?a

“不确定值”并不意味着“非零”。零并不会使其成为变量初始值的无效候选者。一些“有用的”编译器在调试版本中将变量初始化为零。如果您不注意编译器警告,它可能会隐藏险恶的错误。