【发布时间】:2019-08-08 04:15:13
【问题描述】:
虽然 C++ 有前进的保证,但我在 C11 规范中看不到任何类似的规则。
为每个函数发出无限循环的 C11 编译器是否符合 C11 规范?假设它像往常一样进行所有预处理/等;它只是有一个相当过分热心的优化器。
诚然,这将是一个相当糟糕的编译器。尽管如此。
【问题讨论】:
标签: language-lawyer c11
虽然 C++ 有前进的保证,但我在 C11 规范中看不到任何类似的规则。
为每个函数发出无限循环的 C11 编译器是否符合 C11 规范?假设它像往常一样进行所有预处理/等;它只是有一个相当过分热心的优化器。
诚然,这将是一个相当糟糕的编译器。尽管如此。
【问题讨论】:
标签: language-lawyer c11
标准的单一程序规则允许实现强加设计人员认为合适的任意“翻译限制”,并且如果违反它们,则以任意方式行事,前提是对于标准中给出的每个翻译限制,至少存在一个程序实施过程正确。当给定任何其他程序时,实现可以做任何它喜欢的事情。
此外,该标准只关注程序行为,而不关注生成的代码,因此在陷入无限循环的程序和运行数万亿年而没有副作用的程序之间没有实际区别在产生结果之前。
一般来说,“C 标准是否允许编译器以某种愚蠢和无用的方式 X 运行”问题的正确答案是“可能。所以?”标准没有努力禁止编译器做愚蠢的事情,而且标准允许符合标准的实现做某事这一事实意味着没有判断这种行为是否会使实现对某些(甚至全部)目的无用。
【讨论】: