大家好欢迎光临
在这个视频中, 我想向你解释什么是编译器错误｡
到目前为止｡
好吧｡
我们已经写了一些代码, 我们注意到, 在构建输出窗口中, 我们发出一个编译命令,
我们知道什么时候有错误｡
好吧｡
通常会有一个很好的描述, 说你的代码中有一个错误, 但这到底是什么意思？
所以当你为一个程序编写代码时, 语言, 编程语言是非常非常严格的｡
他们有规矩｡
你必须遵循这些规则才能获得一个可执行的程序｡
编译器实际上会检查代码的语法｡
如果它是正确的, 如果没有语义错误, 它将从源代码生成, 机器语言类型的代码,
你可以运行一个程序｡
所以你必须遵守这些规则, 这些规则非常详细｡
所以你必须非常注重细节｡
所以编译器错误有两种形式｡
它们可能以语法错误或语义错误的形式出现｡
语法错误是当你的代码结构有问题时, 你没有遵循语言的语法规则,
对吗？
你没有把括号放在正确的地方｡
你并没有用分号来添加所有的语句｡
你没有你拼错了关键词｡
这些都是常见的例子｡
分号是一个非常常见的一个当你第一次开始的时候｡
所以如果你声明了一个变量, 并把它赋值给5, 但是结尾没有分号,
这就是语法错误.
那个结构有点问题｡
就像你要使用一个printf语句, 你在双引号里说一个printf语句,
但是你忘记了结尾, 双引号｡
这是一个语法错误｡
所以当编译器扫描你的源代码发现这个错误时, 它通常会给出一个描述性的错误,
可以为你指出正确的方向, 通常也会给出行号｡
我们已经在之前的视频中看到了｡
编译器可以捕获的另一种类型的错误是语义错误｡
如果语义错误是逻辑错误, 它并不总是捕捉到语义错误, 但语义通常意味着语义有问题｡
程序的意图｡
例如, 如果你要添加两个变量A和B, 但这两个变量的类型不同, 这是没有意义的,
对吗？
把A和B加起来没有意义｡
编译器有时可以捕获这些语义错误｡
其他语义错误与逻辑有关, 我们将讨论这些｡
编译器并不总是能找到它们｡
结构是正确的, 一切都很好的结构, 但逻辑上的东西是不正确的｡
代码的逻辑有错误｡
所以当你想到语义错误时, 编译器可以捕获什么,
它更多地与类型捕获和你不应该做的事情有关, 关于变量类型的语言规则不同｡
现在让我们以代码的角度来看看C编程语言中一些语法和语义错误的常见示例｡
因此, 在这里, 我们在代码光与一个简单的Hello world类型的应用程序｡
这是从项目设置中为您生成的代码｡
如果您已将其保存为模板｡
很简单的代码对吗？
当你编译这个文件的时候, 它会告诉你是否有语法错误｡
你可以再次右键单击, 然后说编译｡
现在我们没有任何错误, 对吧？
但在语法上我们遵循所有规则｡
但是语法也包括了代码的所有结构｡
所以如果你没有分号, 或者在include之前没有井号, 你试图编译它｡
你会看到有一个错误, 通常编译器的错误是有某种含义的｡
现在, 随着你写的代码越来越多, 练习也越来越多, 这些编译器就不会那么迟钝了｡
它们不会是非描述性的, 你会有点熟悉, 比如, 这个错误说我们在第一行有一个错误,
对吧？
所以这很好｡
你可以双击它｡
它会转到那个错误, 但它说expected equals知道分号｡
它并不能真正告诉你什么是错的｡
你知道, 通过编程实践, 你会意识到, 哦, 我忘了英镑符号｡
因此, 如果您是编程新手, 有些编译器错误并不像您所希望的那样具有描述性｡
所以你把它加上, 加上磅符号, 你重新编译, 你就可以开始了｡
如果你拼错了标准的i/o, 有时它将无法找到它｡
所以你保存它, 重新编译, 你会看到一个错误, 说得更详细一点｡
对吧？
没有这样的文件或目录Stdio｡ 这就像是在告诉你, 哦, 也许你拼错了｡
所以拼写错误是常见的错误｡
你知道, 没有把事情放在正确的角度来看, 在不匹配的括号｡
你知道, 你忘记了一个括号, 你知道, 你再次编译｡
让我们看看这个错误是什么样子的｡
再说一次, 这不是超级描述性的｡
它说, 你知道, 基本上在结束的花括号之前有一个括号, 因为它不知道它认为右括号可能会在这里结束｡
它不能总是告诉你到底发生了什么｡
所以圆括号和缺少的花括号有时并不具有描述性｡
但是如果你有一些东西, 比如缺少分号, 那就很简单了｡
这个编译错误会告诉你到底发生了什么｡
在返回之前需要分号, 甚至会将您指向应该放置分号的位置｡
所以你可以双击它, 如果缺少双引号, 就加上分号, 然后重新编译｡
对吧？
你现在看到的东西说基本上失踪, 终止双引号｡
同样的, 它会告诉你第一个引用发生在哪里, 它会给你多个错误,
对, 即使你只有一个｡
所以你有了双引号, 你就可以开始了｡
现在, 这个main命令告诉你需要返回一个int｡
如果你实际上试图返回类似于inside inside of double quotes的东西呢？
同样, 你没有遵循语言的结构, 它告诉你, 基本上你从函数类型返回一个字符指针｡
同样, 这些编译错误现在可能对您没有意义, 但随着您编写的代码越来越多,
它们将变得更有意义｡
但关键是要遵循这个结构｡
现在, 如果你试着做一些事情, 使它在语法上有意义, 但意思是不正确的｡
例如, 我们打印一个F, 然后我们尝试做一个算术运算,
比如除以8或除以7｡
我们保存并编译它, 现在我们看到更多的语义错误, 在双引号后面有一个除法符号｡
你知道它实际上应该是分号, C, 主要是语法错误, 语义错误｡
代码的含义通常与逻辑有关｡
没有发现像C++这样的语言在使用时会发生更多的语义错误｡
物体｡
因此, 请注意编译器的语法错误｡
常见的拼写错误｡
关键字, 在开始的时候没有括号结尾, 如果没有开始和结束的代码块,
你可能会有多个错误, 对吧？
所以我们说我们有Hello World｡
我们少了一个分号｡
我们返回一个字符串｡
你知道, 我们缺少一个支架, 你知道, 我们建立它｡
这是一个相当小的程序｡
但是当我们现在试着编译它的时候, 我们看到了多个错误, 对吧？
两个错误｡
有点棘手, 我该从何说起？
通常你要做的是修复第一个错误, 因为有时一个错误会导致更多的错误｡
所以你总是想在最上面的编译器错误, 并首先修复它｡
所以你想修5号线的那个, 对吗？
然后你可能想修复, 然后重新编译, 然后可能修复第六行的那个｡
现在上面写着杰森
所以现在你可以说返回零, 但总是在修复后续错误之前修复第一个错误, 因为一个错误可能会导致另一个错误｡
顺便说一下, 我们的代码中总是会有错误｡
即使是最有经验的程序员也会遇到语法错误｡
所以出现错误是很正常的｡
真正重要的是理解来自编译器的消息, 告诉你如何纠正它们｡
而且, 这将在实践中实现｡
我们会在以后的视频中更多地讨论编译器, 常见的编译器, 但是只要确保你在学习语言的时候遵循了语言的结构,
语法语言等等｡
在接下来的几节课中, 我们将讨论, 我们如何能有不同类型的错误｡
我提到了逻辑错误｡
我们也可以谈谈警告｡
我们还将讨论链接器错误和运行时错误｡
谢谢大家｡