比较已定义和未定义的变量

Comparing defined and undefined variables

我做了一个基本的树结构如下

typedef struct Tree {
    int val;
    struct Tree *left, *right;
}Tree;

我创建了两棵树,一棵的值为 16,另一棵没有值。不是 NULL,只是没有价值。 (树本身是 NULL 但值不是)

当我比较这两个值时,我注意到无论我输入 > 还是 <,它总是计算为 false。

会一直这样吗?因为如果是这样的话就很方便了。有没有这行不通的情况?

当你不初始化一个对象时,它的初始值是indeterminate (C 2018 6.2.4)。这意味着不仅它的值不受控制(C 源代码没有对值进行确定性设置),而且该值甚至不是固定的(当多次使用时,它可能表现得好像它具有不同的值一样每一次)。此外,根据情况,使用未初始化的对象也可能具有 C 标准未定义的行为——不仅它的值可能是任何东西,而且尝试使用该值可能会导致程序崩溃或行为不当其他方式。

当使用未初始化对象的值(并且只是不确定的,而不是未定义的)时,编译器可以自由地表现得好像它具有任何值一样。因此,作为优化的一部分,编译器可能会忽略对值的任何实际测试,并生成分支代码,就好像测试是真或假,正如编译器恰好选择的那样。编译器生成的代码实际上是偶然的,您无法控制。您不能依赖总是评估为 false 的测试。

始终初始化您的对象。