← 目录 / C++ 编程语法
从第一行代码出发,认识 C++ 程序的骨架结构,理解每一行代码的含义,以及代码从源文件到可执行程序的完整旅程。
1.1
在正式开始写代码之前,先来认识 C++ 程序的基本结构。就像写文章需要有开头、正文、结尾,C++ 程序也有它固定的骨架。
下面是我们的第一个 C++ 程序——它会在屏幕上输出 Hello, World!。
| 1 | #include<iostream> // ① 引入头文件(输入输出工具包) |
| 2 | using namespace std; // ② 使用 std 这个"大仓库" |
| 3 | |
| 4 | int main() // ③ 主函数:程序从这里开始 |
| 5 | { |
| 6 | cout << "Hello, World!"; // ④ 输出文字 |
| 7 | return 0; // ⑤ 程序正常结束 |
| 8 | } |
1.2
上面的程序每一行都有特定的含义,我们来逐行理解:
| 代码 | 含义说明 |
|---|---|
| #include<iostream> | 加载"输入输出工具包",这样程序才能在屏幕上显示文字(cout)、从键盘接收数据(cin) |
| using namespace std; | 这些工具都放在一个叫 std 的"大仓库"里,这行代码让我们能直接取用,不用每次都写"从 std 仓库里拿"(即 std:: 前缀) |
| int main() | 主函数,是程序的入口。程序运行时,会从 main() 开始执行 |
| { } | 花括号包裹函数体(要执行的代码块) |
| cout << "..." | 向屏幕输出内容,<< 是插入运算符 |
| return 0; | 结束主函数,0 代表程序正常退出 |
; 结尾,忘记分号是初学者最常见的错误!#include<iostream>:可以理解成告诉计算机——"我们要用你内置的‘输入输出工具包’,这样才能在屏幕上显示文字,或者接收键盘输入。" 这个工具包里就装着 cout、cin 这些东西。using namespace std;:这个工具包(以及 C++ 标准库里其他的工具)都被统一放进了一个叫 std 的"大仓库"里。写这行代码,就是让我们能直接喊工具的名字(比如 cout),而不用每次都写"从 std 仓库里拿 cout"(也就是 std::cout)这么麻烦。1.3
注释是写给人看的说明文字,程序运行时会被自动忽略。C++ 支持两种注释方式:
//从 // 开始,直到该行末尾,整行都是注释。
/* ... */用 /* 和 */ 包裹,可以跨越多行,适合写较长的说明。
| 1 | // 这是单行注释,从 // 开始,到行尾结束 |
| 2 | |
| 3 | /* |
| 4 | 这是多行注释 |
| 5 | 可以跨越多行 |
| 6 | 适合写较长的说明 |
| 7 | */ |
| 8 | |
| 9 | int main() |
| 10 | { |
| 11 | // 单行注释:输出问候语 |
| 12 | cout << "Hello!"; // 也可以写在语句后面 |
| 13 | return 0; |
| 14 | } |
1.4
你可以把这个过程想象成一次"翻译 + 组装"的旅程:你写的源代码是"中文",计算机只听得懂"机器语言",中间需要经过一层层翻译,最后再把翻译好的各个零件组装成一个真正能运行的软件。
这段旅程一共分四步:预处理 → 编译 → 汇编 → 链接,每一步都会生成对应的文件。先看整体流程,再逐步展开细节。
| 1 | #include <iostream> |
| 2 | #define PI 3.14 |
| 3 | |
| 4 | int main() |
| 5 | { |
| 6 | // 打印圆周率 |
| 7 | std::cout << PI << std::endl; |
| 8 | return 0; |
| 9 | } |
#include <iostream> 替换成 iostream 头文件的全部内容;把代码中所有 PI 替换成 3.14;删掉所有注释。最终输出一个没有任何宏、没有任何注释的纯净 C++ 文本文件。
.s 文件)——就像把中文翻译成更接近机器的"暗语"。
.o 或 .obj)。此时文件已经是二进制了,人类看不懂,但 CPU 也还不能直接运行,因为还有很多函数地址没有确定。
std::cout,但 cout 的实现代码在标准库的目标文件里,不在你的文件里。链接器把你的 .o、标准库的 .o、其他用到的库全部拼合在一起,把所有函数调用的"空白地址"都填上正确地址,最终生成可以直接运行的可执行文件(Windows 下通常是 .exe,Linux 下通常无后缀名)。
.cpp 文件)。知道方向,排错就会快很多。
📎 拓展知识 · 竞赛小贴士
#include <bits/stdc++.h>——这个"万能头文件"能一次性引入几乎所有标准库头文件,图省事时很好用。#include<iostream>:一来能帮你更清楚地理解"用了什么工具就该引入什么头文件"这件事;二来 bits/stdc++.h 只在 GCC 编译器下有效(虽然大多数 OJ 平台支持),并不是 C++ 标准的一部分,还会拖慢编译速度——在部分限时竞赛中需要留意。