Compiler construction 理解编译器错误消息

Compiler construction 理解编译器错误消息,compiler-construction,Compiler Construction,每种语言,甚至某一语言的不同编译器,在输入错误时都会显示不同的错误消息集 除此之外,在学习一种新语言时,您使用哪些技术来破译编译器错误消息?阅读文档 我不确定这是一个合理的问题,因为我不认为“技术”是描述理解不熟悉的错误消息的正确范例。更像是你必须习惯于理解你得到的信息类型和它们的含义,比如你学习任何复杂语言或习语的过程。每次你发现错误并找出错误所在时,你都在建立自己的理解 换句话说,时间和重复。复制并粘贴到谷歌搜索。这可能太明显了,但从编译器报告的第一条消息开始。其余部分可能从第一部分开始级联

每种语言,甚至某一语言的不同编译器,在输入错误时都会显示不同的错误消息集


除此之外,在学习一种新语言时,您使用哪些技术来破译编译器错误消息?

阅读文档

我不确定这是一个合理的问题,因为我不认为“技术”是描述理解不熟悉的错误消息的正确范例。更像是你必须习惯于理解你得到的信息类型和它们的含义,比如你学习任何复杂语言或习语的过程。每次你发现错误并找出错误所在时,你都在建立自己的理解


换句话说,时间和重复。

复制并粘贴到谷歌搜索。

这可能太明显了,但从编译器报告的第一条消息开始。其余部分可能从第一部分开始级联。

对语言结构的基本知识很有帮助。我记得的一个例子是,我在大学里帮助朋友们学习comp-sci入门课程。其中一个从C++编译器中得到了一个消息:“本地函数定义是非法的”。我立刻知道提问者忘记了关闭函数的括号

问我的人甚至不知道“局部函数定义”是什么意思,这是完全可以理解的。跳转到包含错误消息的行有帮助,阅读该消息表明函数定义位于“错误的位置”。知道函数是如何工作的,人们可能会认为这意味着他们无意中试图在另一个函数中声明一个函数。当然,了解函数定义是非法的。怎么会这样?最有可能的罪犯是那些牙套


从本质上说,我建议你花点时间分析这条信息真正想告诉你的是什么。它认为你想做什么,为什么会这样想?按照ennuikiller的回答阅读文档也没有什么坏处。一定程度的经验是必要的,但逻辑思维和推理会让你走得更远。

真的,你必须学习每个编译器的方言。在第三次从编译器收到相同的错误消息后,您开始注意到启动它的模式。最终,你会明白,只要看一条信息,你就知道你一定做了什么

同时,如果消息的原因不明,你可以尝试用谷歌搜索消息文本中最独特的部分。我在新的编译器上很幸运

有些编译器比其他编译器有更好的错误消息,但真正起作用的是缩短您的学习曲线。

两种技巧:

  • 除了第一条信息,不要关注任何信息。在太多的编译器中,会显示稍后的错误消息

  • 当有疑问时,故意犯错误,看看编译器是如何诊断它们的


在那之后,对我来说是谷歌和Stackoverflow

我不同意。理解编译器错误消息有几种技巧,可以帮助初学者更快地理解给定的错误消息。我怀疑那些与编译器打了几十年交道的人很可能已经掌握了这些技能,并且对这些技能的基本理解根深蒂固,以至于他们甚至不再去想它了。这些技能肯定会随着时间的推移而学习,但如果能帮助那些刚刚起步的人,那就太好了。亚当,你可能是对的,但我仍然和史蒂夫在一起。我已经编程30年了,但每当我尝试学习一门新语言(显然是在一个新的编译器上)时,就好像我16岁了,又在试图找出编译器想要我做什么。听起来很愚蠢,但它会让你像冠军一样通过那些模糊错误的学习曲线。我希望我能+1000这个答案。如果每次有人问我一个关于编译器的问题时我都能得到一美元,而这个问题很容易通过搜索谷歌得到回答,那么我真的会是一个非常富有的人。