C 标准 (AFAIK) 使用这两个术语。我很难理解两者之间的区别在哪里。
如果我有任何给定的、语法正确的 C 语句,编译器不可能不发出一些机器指令。当然,它可以选择根本不发布任何声明,但即使这样也会“依赖于实现”。
一个更具体的例子:整数值溢出。现在我们有两种类型的溢出:算术溢出和内存溢出。如果有符号整数的溢出按照标准是UB,那是什么意思呢?实现是否可以简单地将溢出位溢出到 MSB 的相邻字节中?(从未见过,但可以吗?)
在我看来,“未定义的行为”总是依赖于实现。或者,换句话说,编译器似乎无法在不引入“实现定义”行为的情况下处理任何“未定义行为”。
那么为什么还要区分两者呢?