请考虑以下事项:
typedef int;
int main () { return 0; }
如果我用没有警告规格的clang编译它,我得
warning: typedef requires a name [-Wmissing-declarations]
typedef int;
这是预期的;根据C11标准的第6.7节,typedef int
是非法的,并且根据第5.1.1.3节,
如果预处理翻译单元或翻译单元包含违反任何语法规则或约束的情况,符合要求的实现应至少生成一条诊断消息。
如果我使用clang -Wno-missing-declarations
编译它,它会编译干净,没有任何诊断消息。
我的问题:
这个标记是否是一个不合规的实现,或者是否可以提供禁用强制诊断的功能?
答案 0 :(得分:3)
从草案C11标准部分4
一致性我们看到它并不严格符合:
严格遵守的程序应仅使用该程序的那些功能 本国际标准中规定的语言和库.3)它 不得产生依赖于任何未指定,未定义或 实现定义的行为,不得超过任何最小值 实施限制。
但它是一个符合要求的实现,因为只要不违反严格符合的程序,允许符合要求的实现具有扩展:
[...]符合要求的实施可能有扩展(包括 额外的库函数),只要它们不改变行为 任何严格符合的程序。 4)
[...]很少有现实的,有用的,严格遵守的程序。另一方面,仅仅符合程序可以使用它想要的任何特定于编译器的扩展。