12.32 人们好像有些在意实现定义 (implementation-defin-ed)、未明确  (unspecified) 和无定义 (undefined) 行为的区别。它们的区别到底在哪里?

简单地说: 实现定义意味着实现必须选择某种行为并提供文档。 未明确意味着实现必须选择某种行为但不必提供文档。 未定义意味着任何事情都可能发生。标准在任何情况下都不强加需求; 前两种情况下, 它有时建议一组可能的行为 (也可能要求从中选择一种)。

注意既然标准对无定义行为没有强制要求, 编译器就绝对可以做 任何事情。特别地, 对程序其它部分的正常运行没有任何保证; 参见问题 3.2, 有一个相对简单的例子。

如果你对书写可移植代码有兴趣, 你可以忽略它们的区别, 因为通常你都 希望避免依赖三种行为中的任何一种。

参见问题 3.8 和 11.34

第四种不那么严格定义的行为是 ``场景特定" (locale-specific)。

参考资料: [ISO, Sec. 3.10, Sec. 3.16, Sec. 3.17]; [Rationale, Sec. 1.6]。

翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)