你好,世界!
你的第一个 C++ 程序只做一件事:在屏幕上显示一行字。这一页的每段代码都能直接在浏览器里编译、运行:点运行,改一改,再运行一次。
1#include <iostream>2 3int main() {4 std::cout << "你好,世界!\n";5 return 0;6}
你好,世界!
每一部分是做什么的:
| 部分 | 是什么 |
|---|---|
#include <iostream> | 引入输入输出的工具,std::cout 就是其中之一。 |
int main() | 程序从 main 开始运行。每个 C++ 程序都有一个。 |
{ } | 花括号里是 main 要做的事。 |
std::cout << "..."; | 把引号里的文字送到屏幕上。\n 是换行。 |
return 0; | 告诉系统:程序顺利结束了。 |
什么是编译
C++ 是编译型语言:代码先交给编译器(比如 g++),翻译成电脑能直接运行的程序,然后才运行。在这里点运行,页面会帮你编译,结果和 g++ 一样。
编译器很严格。少写一个分号,它就不肯编译,还会告诉你哪里不对:
1#include <iostream>2 3int main() {4 std::cout << "少了分号\n"5 return 0;6}
main.cpp: In function 'int main()':
main.cpp:4:30: error: expected ';' before 'return'
4 | std::cout << "少了分号\n"
| ^
| ;
5 | return 0;
| ~~~~~~看带 error: 的那一行:main.cpp:4:30 是文件名、第 4 行、第 30 列,error: 后面是哪里不对。编译器还指出了 ; 应该放在哪儿。改好再运行一次。
小技巧: C++ 的报错有时很长。先看第一个 error:,后面的常常是它连带出来的。
一行一行地跑
main 里的语句从上到下,一条接一条地运行,每一条以分号结尾。点单步,看它一行一行地走。
1#include <iostream>2 3int main() {4 std::cout << "第一行\n";5 std::cout << "第二行\n";6 std::cout << "第三行\n";7 return 0;8}
第一行 第二行 第三行
cout 和 <<
std::cout 是输出流:用 << 送给它的东西都会显示到屏幕上。一条语句可以连着送好几样,数字也行:
1#include <iostream>2 3int main() {4 std::cout << "苹果:" << 3 << "\n";5 std::cout << "一共:" << 3 + 4 << "\n";6 return 0;7}
苹果:3 一共:7
std::cout 不会自己换行。不写 \n,下一次输出就接在同一行后面:
这段程序显示几行?
1#include <iostream>2 3int main() {4 std::cout << "A";5 std::cout << "B\n";6 std::cout << "C\n";7 return 0;8}
"A" 后面没有 \n,所以 B 紧跟在 A 后面:显示 AB,然后换行。接着 C 自己一行。一共两行。
别人的代码里你还会看到 std::endl,它也会换行(并且马上把输出送出去)。这门课写 \n(从第 2 课起写成 '\n'),几乎所有地方都够用。
std:: 是什么
cout 属于标准库,标准库的名字都放在 std 里。std::cout 的意思是「std 里的那个 cout」。不写 std::,编译器就不认识这个名字:
1#include <iostream>2 3int main() {4 cout << "你好\n";5 return 0;6}
main.cpp: In function 'int main()':
main.cpp:4:5: error: 'cout' was not declared in this scope; did you mean 'std::cout'?
4 | cout << "你好\n";
| ^~~~
| std::coutg++ 还会提示怎么改:did you mean 'std::cout'?。很多教程在开头写 using namespace std;,后面就能省掉 std::。这门课每次都写 std:::程序大了不容易和别的名字撞车,也一眼看得出名字是从哪儿来的。
特殊字符
在字符串里,反斜杠 \ 加后面一个字符,表示一个不好直接打出来的字符:
| 你写 | 得到 |
|---|---|
\n | 换行 |
\t | 制表符(跳到下一个对齐的位置) |
\" | 双引号 |
\\ | 反斜杠 |
1#include <iostream>2 3int main() {4 std::cout << "名字\t分数\n";5 std::cout << "小林\t95\n";6 std::cout << "她说:\"你好\"\n";7 std::cout << "路径:C:\\code\n";8 return 0;9}
名字 分数 小林 95 她说:"你好" 路径:C:\code
注释
注释是写给人看的,编译器会跳过。从 // 到这一行末尾是注释;/* 和 */ 之间的也是,可以跨好几行。
1#include <iostream>2 3int main() {4 // 先打个招呼5 std::cout << "你好\n";6 /* 这一句先不要:7 std::cout << "再见\n";8 */9 return 0;10}
你好
main 和 return 0
程序从 main 里的第一条语句开始,到 return 0; 结束。0 的意思是「一切顺利」,别的程序能看到这个数,知道它有没有出错。这门课的每个程序都这样写,main 最后是 return 0;。
1#include <iostream>2 3int main() {4 std::cout << "开始\n";5 return 0;6 std::cout << "这一行不会运行\n";7}
开始
程序在 return 就结束了,所以最后一行什么也不显示。
练一练
写好代码,点检查。提示随便看,实在想不出来再看答案。
第一个程序
✓让程序显示 你好,C++!,然后换行。
你好,C++!
1#include <iostream>2 3int main() {4 5 return 0;6}
一条语句,两行字
✓只用一条 std::cout 语句,显示下面两行。
苹果 香蕉
1#include <iostream>2 3int main() {4 std::cout << "苹果";5 return 0;6}
修好它:不认识的名字
✓这段程序编译不过。改好它,让它显示 价格:25。
价格:25
1#include <iostream>2 3int main() {4 cout << "价格:" << 25 << "\n";5 return 0;6}
这一课学会了
- C++ 程序从
main开始运行;#include <iostream>引入std::cout。 - C++ 要先编译再运行。编译错误会给出行号和原因,先看第一个。
std::cout << ...显示文字和数字;连着几个<<就显示几样。- 输出不会自己换行,要写
\n;\t、\"、\\表示特殊字符。 - 标准库的名字前面写
std::;//和/* */是注释;return 0;表示一切顺利。