1@DevAllanPer:编译器对代码进行非常复杂的操作。当我还是个孩子的时候,编译器很简单。它们读取你的源代码并写出类似于人类书写的汇编代码。然而,今天,它们会查看你的程序并尝试解决问题:“如何编写一个新的短小快速的程序来完成与这个大程序相同的任务?”然后它们会写出全新的东西。关键在于,如果你的程序中有一些未定义的部分,编译器可以将其更改为任何内容。因此,结果就是编译器正在执行的其他任何操作的副产品。 - Eric Postpischil
1@DevAllanPer:未定义行为在C标准中被定义为“使用不可移植或错误的程序结构或错误的数据时,对于这个国际标准没有强制要求的行为”。就标准而言,这就是它的全部含义。标准笑话是,它可以合法地让恶魔从你的鼻子里飞出来(当然它物理上做不到,但如果它能做到,它也不会违反标准)。从某种意义上说,未定义行为最糟糕的后果是你的程序会安静地按照你的预期行为运行;这意味着很难找到错误。 - Keith Thompson