对于初学者而言,一般意义上,程序错误可以分为两类,逻辑错误和非逻辑错误.前者是指,程序可以通过编译或链接但运行时不符合预期结果,后者是程序不能通过编译或链接. 乍一看这样的分类非常清楚.不过,当引入语言标准对程序行为的规范时,事情变得复杂了. 例如, ISO C/C++ 中,引起 undefined behavior (未定义行为)的如果是错误,属于以上分类中的哪一种错误——即,引起 undefined behavior 的程序是否需要保证编译或链接的成功? 事实上,这一点在 ISO C 和 I…