LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 204|回复: 0

C++解剖Hello World!

[复制链接]
发表于 2024-1-9 16:09:03 | 显示全部楼层 |阅读模式
现在您已经简要了解了哪些语句和函数,让我们回到我们的“Hello world”程序,并更详细地了解每行的内容。

#include <iostream>

int main()
{
   std::cout << "Hello world!";
   return 0;
}

第1行是一种特殊类型的行,称为预处理程序指令。这个预处理器指令表明我们想要使用iostream库的内容,它是C++标准库的一部分,允许我们从/向控制台读取和写入文本。我们需要这一行来在第5行使用std :: cout。排除这一行会导致第5行出现编译错误,因为编译器不会知道std :: cout是什么。

第2行是空白的,编译器会忽略它。该行仅用于帮助使程序对人类更具可读性(通过分离#include预处理程序指令和程序的后续部分)。

第3行告诉编译器我们将编写(定义)一个名为main的函数。如上所述,每个C++程序都必须具有main函数,否则将无法编译。

第4行和第7行告诉编译器哪些行是主函数的一部分。第4行的开口花括号和第7行的结束花括号之间的所有内容都被视为主要功能的一部分。这称为函数体。

第5行是函数main中的第一个语句,是我们运行程序时将执行的第一个语句。 std :: cout(代表“console output”)和operator <<允许我们向控制台发送字母或数字以便输出。在这种情况下,我们发送文本“Hello world!”,它将输出到控制台。此语句创建程序的可见输出。

第6行是一个返回语句。当可执行程序完成运行时,程序会将值发送回操作系统,以指示它是否成功运行。这个特殊的return语句将值0返回给操作系统,这意味着“一切正常!”。这是程序中执行的最后一个语句。

我们编写的所有程序都将遵循此通用模板或其变体。

作者的说明:如果上述解释的部分(或全部)令人困惑,那么此时就会出现这种情况。这只是为了提供快速概述。随后的课程将深入研究上述所有主题,并提供大量额外的解释和示例。

您可以自己编译并运行该程序,您将看到它将以下内容输出到控制台:

Hello world!

如果您遇到编译或执行此程序的问题,请查看第0.8课- 一些常见的C++问题。

语法和语法错误
在英语中,句子是根据你在学校英语课上学到的特定语法规则构建的。例如,普通句子在一段时间内结束。管理语句如何在语言中构造的规则称为语法。如果您忘记了句号并同时运行两个句子,则这违反了英语语法。

C++也有一个语法:关于如何构造程序以便被认为有效的规则。编译程序时,编译器负责确保程序遵循C++语言的基本语法。如果违反规则,编译器会在您尝试编译程序时发出抱怨,并向您发出语法错误。

让我们看看如果我们在“Hello world”程序的第5行省略分号会发生什么,如下所示:

#include <iostream>

int main()
{
   std::cout << "Hello world!"
   return 0;
}

随意自己编译这个不正确的程序。

Visual Studio产生以下错误(您的编译器可能会生成具有不同措辞的错误消息):

c:\vcprojects\test1.cpp(6): error C2143: syntax error : missing ';' before 'return'

这告诉你在第6行有一个语法错误:编译器在return语句之前期望分号,但它没有找到一个分号。虽然编译器会在遇到语法错误时告诉你编译哪行代码,但遗漏实际上可能在前一行。在这种情况下,错误实际上在第5行的末尾(编译器直到第6行才发现问题)。

编写程序时,语法错误很常见。幸运的是,它们通常很容易找到并修复,因为编译器通常会指向您。只有解决了所有语法错误后,才能完成程序的编译。

您可以尝试从“Hello world”程序中删除字符甚至整行,以查看生成的各种错误。尝试在第5行的末尾恢复丢失的分号,然后删除第1,3或4行,看看会发生什么。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表