致命错误与非致命错误的区别

use*_*077 4 c++

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

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

Bat*_*eba 9

一个致命的错误可能会立即停止该翻译单元的汇编。

编译器可能会在出错后继续编译,以便向您显示更全面的问题列表。

尽管在您的情况下,预处理器似乎发出了致命错误。也许这只是取决于编译器作者的心情。


Jea*_*bre 7

区别在于:

  • 对于正常错误,编译器可以继续解析,这只是一个局部问题(例如,未声明的变量,但编译器知道如何从中恢复。一些编译器在该过程中走得很远,添加缺失;等)
  • 在发生致命错误时,编译器(或预处理器)由于结构错误(丢失上下文)而无法知道如何继续(就像“丢失”一样)

这解释了有时您修复了所有编译错误,并且会出现新的错误。


Bas*_*tch 4

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

大多数编译器不会给出致命错误,除了编译器错误、编译时缺乏资源或源输入无法进一步编译时:考虑 -ing#include一个不存在的头文件。

顺便说一句,有时编译器会给出如此多的错误(例如,尝试编译伪装成 C 文件的英语或法语文献文本),以至于进一步的编译意义不大。