致命错误和非致命错误之间的区别

时间:2014-08-20 09:27:01

标签: c++

当尝试编译代码时,IDE中的致命错误和非致命错误之间的主要区别是什么?

在这两种情况下,编译器都会显示错误消息,并且不会编译程序。致命错误是编译器或链接器中未定义的编译器错误吗?

3 个答案:

答案 0 :(得分:3)

IDE不是编译器。它通常在命令行中启动另一个程序(如GCC ...)进行编译。您的IDE只是一个美化的编辑器(在Linux上,emacs编辑器通常比IDE更好。)

大多数编译器都没有给出致命的错误,除了编译器错误,编译时缺少资源,或者无法进一步编译源输入时:想到#include - 不存在的头文件。

BTW,有时编译器会给出如此多的错误(例如,尝试编译伪装成C文件的英文或法文文本),进一步编译意味着更少。

答案 1 :(得分:3)

差异通常基于编译单元(单个.cpp文件),尽管有时在整个构建过程中。

主要区别在于致命错误会导致它放弃编译。因此,例如,如果通过包含不存在的标头而导致致命错误,则不会编译编译单元。

如果您遇到常规错误,例如使用未定义的符号或错过右括号,它将尝试为您编译文件的其余部分。这可能会发现更多错误,您可以在尝试重新编译之前一次修复这些错误。当然,其中一些可能是由前一个引起的。

没有"标准"因此,可能会考虑缺少标题"致命"因为很可能在没有标题的情况下会有大量未定义的类型等等,所以它被认为是#34;不值得"报告他们。不同的编译器可以判断错误不是致命错误,无论如何都要报告它们。

答案 2 :(得分:0)

逻辑错误(例如,当块中的两个大括号都被省略时)在执行时会产生影响。 致命的逻辑错误会导致应用程序失败并过早终止。 非致命的逻辑错误允许应用继续执行,但会导致它产生错误的结果。