是否允许一致的C11实现将每个函数编译成无限循环?

时间:2019-03-17 18:27:08

标签: language-lawyer c11

尽管C ++具有向前进度保证,但在C11规范中我看不到任何类似的规则。

为每个函数发出无限循环的C11编译器是否符合C11规范?假定它照常进行所有预处理/等操作;它只是一个过于狂热的优化器。

诚然,这将是一个相当糟糕的编译器。不过。

1 个答案:

答案 0 :(得分:0)

该标准的“一个程序规则”允许实施者施加设计者认为合适的任意“翻译限制”,并在违反这些限制的情况下以任意方式表现,前提是该标准中给出的每个翻译限制均至少存在一个“程序”,实施过程正确。给定任何其他程序时,实现可能会执行其喜欢的任何事情。

此外,该标准仅涉及程序行为,而不涉及生成的代码,因此,在陷入无休止循环的程序与可运行数万亿年且无副作用的程序之间没有实际区别。在产生结果之前。

通常,对“ C标准是否允许编译器以某种愚蠢且无用的方式运行X”这一问题的正确答案是“大概。是吗?”。该标准不竭力禁止编译器执行愚蠢的事情,并且该标准将允许符合规范的实现来做某事的事实并不意味着对这种行为是否可能使实现对某些(甚至所有)目的无用的判断。 / p>