繁体   English   中英

如何定义编译器警告和错误,它们是否包含在标准中[关闭]

[英]How are compiler warning and Errors defined and are they ever included in the standard [closed]

作为关于这个问题的一个人 编译器错误和警告是否已指定标准,如果不是,为什么不。 我已经用gcc和vs编写了很长时间,并且学习警告和错误试图告诉你的不是统一的体验。 使用像.net和java这样的语言,其中一个实体具有总体控制权,而不是一个有趣的问题。 在标准警告和错误以及级别分类中是否会有一些价值。 考虑到这些标准可用的编译器数量,我最感兴趣的是c ++或C.

它(显然吗?)从一种语言到另一种语言都不同。

C标准根本不需要任何警告。 它需要对任何违反约束或语法规则的翻译单元进行“诊断”,但不要求拒绝翻译单元。 必须拒绝翻译单元的唯一情况是它包含#error指令而不是#if '。 C ++规则类似。 gcc通常会警告约束违规,但您可以使用-pedantic-errors更改它。

这样做的一个优点是,它允许编译器实现扩展。 例如,如果它将0b11001001识别为二进制常量,则它可以发出语法错误警告,然后继续编译该程序。

另一方面,Ada要求编译器拒绝有错误的源文件,并且需要编译时警告(不会导致编译失败)。

对于定义,警告是一种不会导致编译失败的诊断。

定义分类会很有用,但跨语言这样做是不切实际的。

据我所知,语言标准仅定义了符合标准的语言实现(例如编译器)对符合标准的程序源的作用。 他们没有定义警告可以是什么。 他们确实说“未定义”或“特定于实现”的行为。

例如,GCC可能会根据其版本(4.6比4.5更精确)和所请求的优化提供不同的警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM