把 Hello World 逐行拆开:#include <iostream> 是预处理(引入输入输出功能)、using namespace std; 是名字空间(省得每次写 std::cout)、int main() { } 是入口函数(程序从这里开始跑,有且只有一个)、cout << "..." << endl; 是输出语句、return 0; 是返回值(告诉系统"正常结束")。三条铁律:语句末尾分号不能少、大小写敏感(Main 不等于 main)、引号必须是英文半角。
一、逐行拆解
#include <iostream> // ① 预处理指令:把"输入输出"功能装配进来
using namespace std; // ② 名字空间:从此写 cout 不用写 std::cout
int main() { // ③ 主函数:程序的唯一入口
cout << "Hello, C++!" << endl; // ④ 把文字送到屏幕,endl 换行
system("pause"); // ⑤ 暂停一下,防止窗口一闪而过
return 0; // ⑥ 交差:0 表示程序正常结束
} // ⑦ 函数体结束
① #include <iostream>
- iostream = input output stream(输入输出流)。它不是一个文件"打开",而是把标准库的一部分内容复制到你的文件里(预处理指令,行首是 #,末尾不带分号)
- 少了它 → 报错 cout was not declared(编译不认识 cout 是什么)
② using namespace std;
- std 是标准库的"名字空间"(可以理解成"标准库的抽屉")。不写这句,每次都得写 std::cout、std::endl
- 少了它 → 报 cout was not declared;写法之争(using namespace std; vs 逐处写 std::)在多人项目里更讲究,入门先用简单写法
③ int main() { }
- int 表示这个函数返回一个整数;main 是固定名字,程序运行从这里开始
- { } 是函数体,里面写要做的事;有且只有一个 main(第 2 章之后会讲其他函数,但没有第二个 main)
- 少了 main → 报链接错误(找不到入口)
④ cout << "Hello, C++!" << endl;
- cout = character output(字符输出);<< 是"往屏幕送"的箭头(形象记忆:箭头指向屏幕方向)
- endl = end line(换行)
- 分号是语句的句号——漏了就是最常见的编译错误
⑤ system("pause");
- 调用系统的 pause 命令(显示"请按任意键继续"),纯 Windows 专有技巧,入门教材爱用
- 用它最好在顶部加 #include <cstdlib>(声明它来自哪里),不加多数编译器也能过
- 替代方案:cin.get(); 或 getchar();(1.2.3 三解法)
⑥ return 0;
- 把 0 交还给操作系统,约定俗成表示"正常结束"(非 0 值表示异常——第 9 章之后细说)
- 少写 return 0; 在 main 里通常不报错(编译器会自动补),但写全是好习惯
二、注释:两种写法
// 单行注释:从 // 到行尾都被忽略 ← 最常用
/* 多行注释
可以写好几行 */
注释不参与编译——它是给人看的:说明"这行为什么这么写"。好习惯:先给自己写注释(比如"// 输出第一行"),后面学复杂逻辑时会感谢自己。
三、三条铁律(新手犯错的 90% 都在这)
| 铁律 | 写错的后果 | 例子 |
|---|---|---|
| 分号不能少 | 编译报错,常指到下一行让人迷惑 | cout << "hi" ← 缺 ; |
| 大小写敏感 | Main/COUT/endl 写错就报"未声明" |
int Main() 不是入口 |
| 引号要英文半角 | 中文引号 " 报"无法识别的字符" |
输入法切成英文再写 " |
附加一条:花括号 { } 成对写、成对缩进——先写 { } 再往里填内容,能避免"括号不配对"。
四、动手 Demo:三处故意写错,看编译器怎么喊
拿 1.2.3 的 hello.cpp,做三轮"破坏实验",每轮改完 Ctrl+S → F11,记下报错原话,然后改回来:
第一轮:删掉 cout 那行末尾的分号
- 预期:报错类似 expected ';' before 'system'——编译器指向的是"下一个词",这是新手迷惑点
第二轮:把 cout 改成 Count(首字母大写)
- 预期:报错类似 'Count' was not declared in this scope——大小写敏感的实证
第三轮:把 "Hello, C++!" 的英文引号换成中文引号
- 预期:报一堆"无法识别的字符"或奇怪的 token 错误——中文标点的实证
看到什么算成功:三轮都能"看懂报错 → 定位 → 改回 → 编译通过"。这个过程练三遍,胜过读三十遍语法书。
30 秒实验:把 cout << "A" << endl; 复制三行,每行换成不同文字——体会"语句可以重复,结构不变";再试着把三行写成一行(用多个 <<),看看输出结果差异。
五、常见误区
- "
#include要用分号结尾"——不用。它是预处理指令,和后面的语句不是一类 - "
using namespace std;是可有可无的装饰"——没有它就要写std::cout、std::endl;省它是"方便换风险"(大项目里名字冲突会麻烦,进阶再讲究) - "
main换成别的名字也能跑"——不能。main是标准规定的入口名,系统只认它 - "报错行号就是错误行"——不一定:漏分号常报在下一行。看行号 ±2 行范围最稳
自测三问(点开对答案)
1. 四段结构分别是什么?——`#include` 预处理引入库、`using namespace` 名字空间、`int main(){}` 入口函数、`cout`/`return` 语句与返回值。 2. 三条铁律?——语句末尾分号不能少;大小写敏感(`Main`≠`main`);引号用英文半角(中文引号会报"无法识别的字符")。 3. 漏了分号为什么常报在下一行?——编译器读到下一个词才发现"上一句没结束",所以行号往往偏后;排查时看行号附近 ±2 行。- ☑ 小结
相关笔记
- C++代码结构 —— 两个视角的总纲
- 使用Dev-C++创建C++文件 —— 这段代码的由来
- C++工程项目文件 —— 编译与链接的过程