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

时间:2013-04-17 10:16:44

标签: c++ c undefined-behavior

我正在阅读关于Undefined behaviour的维基百科文章。

  

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

然而,this answer说,字符类型可以。维基百科在这里错了吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

未定义的行为并不意味着非法您的程序将在此处崩溃

如果使用未初始化的变量(如果分配基本变量并且不为其赋值,则会发生这种情况,字符类型是一种特殊的基本类型),则根本不确定该值。它可以是任何东西。你可能不会理会它可以是任何东西,因为例如你可以稍后分配一个值,也许只在某些情况下。

然而,当这变得严重时,当你读取变量的值并根据未初始化的值做出进一步的决定时,例如在条件中:

int x;

if (x > 0) {
    ...
} else {
    ...
}

这会为您带来here

你联系的答案是,以下内容非常好:

int x;

if (someCase) {
    x = ...
} else {
    ...
}

// later:

if (someCase) {
    // read x
}