Visual Studio中的语法错误与编译器错误,或红色波浪下划线与蓝色波浪下划线

时间:2016-11-11 15:00:34

标签: c# .net visual-studio compiler-errors syntax-error

Visual Studio看到的“语法错误”和“编译器错误”之间有什么区别?或者换句话说,为什么一些“编译时”错误用 red 波浪线和一些 blue 波浪线加下划线?这是一个例子:

enter image description here

上面的红色下划线错误有以下描述:

  

方法'ValidateFilteredRecipient'没有重载需要6个参数

蓝色下划线错误有以下描述:

  

'ValidateBuild':无法在静态类中声明实例成员

我不清楚这两个错误的区别特征是什么。

我认为找到答案将是一块蛋糕:我只是谷歌它,第一个结果将是一个MSDN页面完全阐述这个主题;然而,非常令人惊讶的是,事实并非如此。我开始试图谷歌的颜色(因为我还不知道红色意味着“语法错误”,蓝色意味着“编译器错误”):

visual studio red underline vs. blue underline

那里没有帮助。然后我尝试了这些搜索:

visual studio error underline color meanings
visual studio underline color meanings

我可以看到这无处可去,所以我用Google搜索了一下,弄清楚VS中设置颜色的位置:工具>选项>环境>字体和颜色。顺便说一句,无法在这里搜索巨大的列表是非常烦人的,但我发现“语法错误”有红色波浪下划线,“编译器错误”有蓝色波浪下划线。

enter image description here

那是什么意思呢?回到谷歌:

visual studio compiler error vs. syntax error

没什么关系。这是我发现的最接近的MSDN:

Fonts and Colors, Environment, Options Dialog Box

此页面包含以下条目:

  

编译器错误 - 编辑器中的蓝色波形指示编译器错误。

  

语法错误 - 解析错误。

完全没有帮助 - 强调“完全”。我一直以为我知道什么是“语法错误”,至少,Wikipedia同意:

  

语法错误是字符序列语法中的错误   或者旨在用特定程序编写的标记   语言。

另外,here is what what it has for syntax

  

计算机语言的语法是定义的一组规则   被认为是正确的符号组合   用该语言编写的结构化文件或片段。

所以,回到上面的“语法错误”:

  

方法'ValidateFilteredRecipient'没有重载需要6个参数

根据我在此处包含的定义,这是一个语法错误怎么样?实际上,在我看来,“编译器错误”我更加接近地满足了语法错误的定义:

  

'ValidateBuild':无法在静态类中声明实例成员

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

语法和编译器错误都会阻止您的代码编译。

语法错误是指代码如何与其他代码进行交互。将参数传递给函数等时类型不匹配的事情。

另一方面,编译器错误指的是更基本的架构违规,例如尝试从密封类继承或在静态类中定义非静态成员。这违背了语言的定义而不是语言的用法。

答案 1 :(得分:1)

语法错误和编译错误之间的主要区别在于Visual Studio检测到它。

在编码时检测到语法错误并突出显示。您不必构建代码来获取这些错误。

但是,编译错误很复杂,编辑在编码时无法检测到。您必须通过编译器(执行构建)运行它来识别它们。因此,有可能最终会在没有编译的情况下继续编码,并且在构建之前无法检测到它们。

基本上,语法错误是编译错误的一个子集。如果您使用文本编辑器(如记事本)编写代码,您将永远不会看到语法错误。通过编译器运行代码时,所有内容都将记录为编译错误。

关于以不同方式突出显示它们,我认为这是开发人员在编写代码时能够理解他能够捕获到的内容的直观表示。

正如大家所提到的那样,在一天结束时,你需要解决这两个问题才能使代码运行。

对于任何编程语言和与该语言一起使用的编辑器都是如此。