Hello,World! [从 0 开始的 C++ 之旅 1.1]

Hello,World

让我们先从一段最简单的 HelloWorld 程序说起

#include <iostream>
using namespace std;
int main() {cout << "Hello,World!" << endl;return 0;
}

在 IDE 运行这段代码,可以看到输出

Hello,World!

建议你先将这段代码记下来
接下来我们来拆解这段代码的含义

#include <iostream>
using namespace std;

这一段代码引用了头文件 iostream 并声明程序会使用标准命名空间(即 std),其中 iostream 包含了我们在第4行使用的 cout 语句,而这个 cout 正处在标准命名空间下

int main() {//省略return 0;
}

这是整个程序的主函数,每一个能编译运行的完整 C++ 代码都应该包含这一部分。当程序被运行时,程序就会从左到右,从上到下地逐行运行大括号里的语句,一直到 return 0。关于函数和 return 的知识会在之后进行讲解。你在这里可以先把在主函数里包含的 return 0 理解为正常退出程序。

cout << "Hello,World!" << endl;

接下来开始讲 C++ 的语法规则

注释

先提示说一嘴,如果你见到像这样的东西:

// 我叫单行注释
/*我叫多行注释(故名思意,我可以跨行)
*/

它们并不会被实际运行,它们仅仅只是注释。注释是用来帮助开发者(包括你自己)理解程序的,可以用 // 开启一行单行注释

// 现在在这里随便写都不会报错

/* 开始一段多行注释,用 */ 结束多行注释。但是多行注释不能嵌套

// 这其实是错的
/* 这是外面 /* 这是里面 */ */// 这才是对的
/* 这是第一段 /* 这是第二段 */

接下来我会多次使用注释进行注解,因此请务必牢记

分号作为结束符

如果你尝试过把 return 0cout 语句挤到同一行:

#include <iostream>
using namespace std;
int main() {cout << "Hello,World!" << endl;return 0;
}

编译运行,你会发现程序依旧可以正常运行 震惊 Python 一百年!为什么?仔细观察原来的程序,你会发现这几条语句后面有个分号

#include <iostream>
using namespace std;
int main() {cout << "Hello,World!" << endl; // ← 这里!return 0; // ← 这里也有!
}

在 C++ 中,一个分号代表着一个语句的结束。可以说分号就是 C++ 中的结束符

使用 cout 输出

依旧是这段程序,尝试更改一下双引号内的内容

#include <iostream>
using namespace std;
int main() {cout << "Goodbye,World!" << endl;return 0;
}

再一次运行程序:

Goodbye,World!

在 C++ 中,我们通常使用 cout 进行输出。在下一章节我们会详细讲解

查看报错

写代码的过程并不是一帆风顺的,让我们先故意制造几个错误,来看看编译器有什么反应。我们先来把分号去掉,将其保存为 main.cpp 并尝试编译运行

#include <iostream>
using namespace std;
int main() {cout << "Hello,World!" << endlreturn 0
}

假如你和我一样使用 GCC(或者说是 MinGW)的话,你应该会看到类似的内容:
img
编译器这次给出了提示。它告诉你在 main.cpp 第 4 行第 35 个字符处附近有个错误(并且现在它还细心的用红箭头帮你指出了是哪里出错了)

main.cpp:4:35: error: expected ';' before 'return'

这句话的意思是,编译器希望在 return 前面找到分号,但是那里并没有分号
编译器一般都会指出你的语法错误(有时候它还会给出警告,那是后话了),这为我们 Debug 提供了极大的便利,所以在程序编译时关注报错信息至关重要。其实不同编译器的报错信息是不同的,如果你看不懂编译器的报错,你可以把它复制下来放到搜索引擎里面查一下。你大可自行修改程序,查看报错,然后进行搜索,我鼓励你这么做!因为这样做对你理解它们的作用有很大用途

总结

  • C++ 输出 Hello,World 的程序长这个样子:
#include <iostream>
using namespace std;
int main() {cout << "Hello,World!" << endl;return 0;
}

其中第一行和第二行的作用是引用头文件 iostream 并声明程序会使用标准命名空间,下面的是主函数,代码会从主函数开始从左到右,从上到下逐行运行,第五行的 return 0 在这里的作用是正常退出程序

  • 注释用来帮助理解程序,单行注释以 // 开头,而多行注释以 /* 开头,*/ 结尾,多行注释不能嵌套
  • C++ 中,';' 是结束符,标准着一条语句的结束
  • 在这段程序中,cout 被用于输出 Hello,World!,在这里改变双引号内的内容可以改变输出内容
  • 当程序出现错误时(准确来说是语法错误),编译器会报错,此时要根据报错信息修改程序

点我跳转到下一节:输入输出 从 0 开始的 C++ 之旅 1.2