在初始化任何自动变量之前使用它

Use of any automatic variable before it has been initialized

本文关键字:变量 初始化 任何自      更新时间:2023-10-16

我正在阅读维基百科上关于未定义行为的文章。

在C语言中,在自动变量初始化之前使用它会产生未定义的行为

然而,这个答案说,对于字符类型是可以的。维基百科错了吗?

在C(我不知道c++)中,类型unsigned char是唯一保证所有可能的位表示具有特定值的类型。没有陷阱表示,没有无效值,没有填充位,什么都没有(与其他类型不同)。

然而,由于某种原因,使程序依赖于未知的位模式是一个坏主意。

未定义的行为并不意味着是非法的或者你的程序会在这里崩溃

如果你使用一个未初始化的变量(如果你分配了一个基本类型变量而没有给它赋值,字符类型是一种特殊的基本类型),那么这个值就是不确定的。它可以是任何东西。您可能不介意它可以是任何东西,因为例如,您可以稍后赋值,可能只是在某些情况下。

然而,当您读取变量的值并根据这个未初始化的值做出进一步的决定时,情况就变得严重了,例如在以下条件中:
int x;
if (x > 0) {
    ...
} else {
    ...
}

这会把你带到这里。

你链接的答案说的是以下内容是完全正确的:

int x;
if (someCase) {
    x = ...
} else {
    ...
}
// later:
if (someCase) {
    // read x
}