Cas*_*ton 6 c int comparison ambiguity
我对C语言编程并不太熟悉(我只用语言做了一些小项目),然而,我的教授说了一些关于它的行为,这让我有些困惑.
他说的是这段代码有时根本不打印任何东西(我完全复制了板上的内容,我相信这是C的伪代码,因为"print"不在C中):
int a = ___________;
int b = ___________;
if (a < b)
print (“<“);
if (a > b)
print (“>”);
if (a==b)
print(“=”);
Run Code Online (Sandbox Code Playgroud)
基本上,你可以在那些没有满足这些条件的int变量中存储一些东西(_ __ _显然不是真正的代码,它只表示存在某些东西).它不一定需要一些填充那些空白的int数字......它可能是世界上的任何东西(并且可能存在在此代码之前发生的事情).
什么能填补这些空白,不会产生任何结果,为什么?
ps - 它与溢出,未定义的行为,超出范围的错误或类似的东西有关
pps - 我很难相信这位教授是错的.他比任何我接触过的人都更了解编程.我确信在某些情况下这是真的.
我想重要的是_部分。如果下划线部分包含代码结果未定义行为,并且以下带有比较的代码由“聪明”编译器针对未定义行为进行优化,则这段代码的最终行为是未定义的。不打印任何内容是合理的未定义行为。
ps 根据维基百科,除以零会导致未定义的行为,尽管大多数编译器将其定义为错误。IIRC 有符号整数溢出也会导致未定义的行为,尽管这通常会导致运行时异常甚至编译错误。因此,如果 a 和 b 被声明为
int a = 1 / 0;
int b = INT_MAX + 1;
Run Code Online (Sandbox Code Playgroud)
您的教授描述的情况可能会发生。但请记住,行为是未定义的,因此无论编译器选择程序的行为,都可能被认为符合标准。