读取恰好具有良好价值的未初始​​化变量

Q-b*_*uit 1 c++ embedded language-lawyer blackfin

我在Blackfin 533处理器上运行的一些代码中遇到了这个bug.

第一次Func()运行时,fooStruct将包含垃圾,但在下一次迭代中,getFoo()偶然返回的旧值仍然存在fooStruct.foo.

FooStruct
{
    double foo;
    double bar;
};

void Func()
{
    FooStruct fooStruct;

    double bar = 123.4 / fooStruct.foo;

    fooStruct.foo = getFoo();
    fooStruct.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)

这意味着第一次运行时,我们正在读取未初始化的变量,这是未定义的行为.以下迭代怎么样?这仍然是未定义的行为吗?在嵌入式处理器上读取未初始化的变量时,我们可以期待看到什么样的行为?

Bat*_*eba 7

遇到了一个未定义的行为,该行为和所有后续语句也未定义.

矛盾的是,未定义之前的任何语句的行为也是未定义的.

至于那种行为,要求对未定义的行为进行分类是不合逻辑的.