首页 > 解决方案 > 如果超出内部固定/非固定翻译限制,实现是否应该发出诊断?

问题描述

上下文:C11:

实现应尽可能避免施加固定的翻译限制。

考虑一个案例:超出内部固定/非固定翻译限制,导致错误代码的静默生成。

如果超出内部固定/非固定翻译限制,则发出诊断似乎是合理的。有谁知道实施是否已经这样做了?

标签: clanguage-lawyerlimitc11diagnostics

解决方案


考虑一个案例:超出内部固定/非固定翻译限制,导致错误代码的静默生成。

语言规范很少说明如果超出翻译限制会发生什么。事实上,对于超出第 5.2.4.1/1 段和脚注 18 的翻译限制,它根本没有什么可说的,您已经阅读了这些内容。

应用语言律师阅读规范,我们可以观察到它们既没有明确指定超出实现翻译限制的程序的行为是未定义的,也没有将它们的实现规范和程序行为限制为符合所有翻译限制的程序. 因此,程序行为不会因为程序超出翻译限制而无法定义。因此,您的假设案例不是由符合标准的实现和符合标准的程序的组合产生的。

规范没有说明的是,实现和程序行为取决于首先接受程序的实现。符合要求的实现不需要接受所有符合标准的程序,甚至也不需要接受所有严格符合标准的程序。当遇到超出其翻译能力的程序时,对符合实现开放的途径是拒绝该程序。如果实现接受并翻译给定程序,则实现一致性要求程序按照语言规范的描述运行。

如果超出内部固定/非固定翻译限制,则发出诊断似乎是合理的。有谁知道实施是否已经这样做了?

在翻译时拒绝程序的实现,无论是因为超出了翻译限制还是出于其他原因,通常都会提供适当的诊断。当然,这里没有人可以保证每个实现在每种情况下都提供这样的诊断。

总的来说,我想我已经回答了您的主要问题:除了 C 实现可能在这方面存在错误外,您不必担心超出翻译限制导致的未定义程序行为。


推荐阅读