[英]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.