基础知识 | 每日一面(75)

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:人们好像有些在意实现定义 (implementation-defin-ed)、未明确 (unspecified) 和无定义 (undefined) 行为的区别。它们的区

别到底在哪里?

小林:实现定义意味着实现必须选择某种行为并提供文档。未明确意味着实现必须选择某种行为但不必提供文档。未定义意味着任何事情都可能发生。标准在任何情况下都不强加需求; 前两种情况下, 它有时建议一组可能的行为。注意既然标准对无定义行为没有强制要求, 编译器就绝对可以做任何事情。特别地, 对程序其它部分的正常运行没有任何保证。如果你对书写可移植代码有兴趣, 你可以忽略它们的区别, 因为通常你都希望避免依赖三种行为中的任何一种。第四种不那么严格定义的行为是 “场景特定” (locale-specific)。

读者:一个程序的 “合法”, “有效” 或 “符合” 到底是什么意思?

小林:简单地说, 标准谈到了三种符合: 符合程序、严格符合程序和符合实现。“符合程序” 是可以由符合实现接受的程序。“严格符合程序” 是完全按照标准规定使用语言, 不依赖任何实现定义、未确定或未定义功能的程序。“符合实现” 是按标准声称的实现的程序。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

正文完