分号
记住一句话:分号 ; 表示“一条语句或声明结束了”。
C++ 里大部分完整的“句子”末尾都要加分号,但后面直接跟大括号 {} 的代码块通常不加。
一、必须加分号的地方
| 场景 | 例子 |
|---|---|
| 变量、常量、对象定义 | int a; string name; const double PI = 3.14; |
| 赋值、运算、函数调用 | a = 10; i++; cout << a; |
| 函数声明(原型) | int add(int a, int b); |
| 类、结构体、枚举、联合体定义 | class A { ... }; struct Point { int x; int y; }; |
| using、typedef | using namespace std; typedef int MyInt; |
| return、break、continue、goto | return 0; break; continue; |
| do-while 的 while 后面 | do { ... } while (x > 0); |
| 空语句 | ; |
二、不要加分号的地方
| 场景 | 例子 |
|---|---|
| 预处理指令 | #include <iostream> #define PI 3.14 |
| 函数定义结尾 | int main() { ... } 后面不加 |
| if / for / while / switch 的代码块后 | if (x) { ... } for (...) { ... } |
| 命名空间定义 | namespace foo { ... } |
| 标签 | case 1: default: |
| 访问修饰符 | public: private: protected: |
| try / catch 代码块后 | try { ... } catch (...) { ... } |
三、容易搞混的特殊情况
- 函数声明 vs 函数定义
- 类定义 vs 函数定义
- for 循环头里的分号
这里的两个分号是语法分隔符,不是“语句结束”。
- 多写分号可能变成空语句
- do-while 很特别
四、一个小口诀
预处理、函数定义、控制块大括号后,不加;
变量、表达式、声明、类定义、do-while,加。
五、看一个完整例子
如果你写代码时编译器报 expected ';',通常就是某行该加分号却忘了。