当程序执行取决于执行顺序时,是否是未定义的行为

Is it undefined behaviour when program execution depends on execution order?

本文关键字:执行 未定义 是否是 程序 取决于 顺序      更新时间:2023-10-16

在形式的表达式中

f( g(), h() );

未定义g()h()的评估顺序。它只是指定一个必须在另一个之前发生。如果g()h()都有程序执行所依赖的可见副作用,那么这种未定义的行为吗?

">

未定义的行为"具有非常具体的技术含义:这意味着对程序可以做的事情没有任何限制。它可能会使计算机着火或侮辱用户。在这里,执行顺序是未指定的 - 根据评估事物的顺序,有几个选项可以发生什么。如果不了解有关编译器、优化器和执行环境的更多信息,就无法准确预测它将是哪一个。

不,不是。术语未定义的行为意味着程序中可能发生任何事情(包括崩溃(。这里的行为是不可预测的,这意味着一件事可能会发生或另一件事,你不能依赖评估的顺序。

最大的区别在于,在您的情况下,从理论上讲,您可以通过测试每次调用后选择的顺序并采取相应的行动来回到程序中的轨道。另一方面,一旦你遇到一个未定义的行为案例,你就完蛋了:它可以随时随地以任何方式咬你,直到程序结束。

相关文章: