由于上述原因,编译器也可以简单地使用 假设未定义行为不会发生,因为对于在某些输入上以未定义的方式行为的程序,一个允许的行为就是简单地使用 就好像输入的是别的东西。也就是说,即使在编译时不知道 d的原始值,编译器仍然可以假设它永远不会为零,并相应地优化代码。在 OP 代码的特殊情况下,这实际上与编译器假设的 0 / 0 == 1是无法区分的,但是编译器也可以,例如,假设 if (d == 0) puts("About to divide by zero!"); d /= d;中的 puts()永远不会被执行!