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