#include 头文件是什么?为什么程序开头都要写它
头文件是什么
C++ 语言本身很小,常用能力——输入输出、字符串、数学函数、容器——都由标准库提供。标准库按功能划分为若干头文件,每个头文件是一类功能的说明书:
| 头文件 | 提供的功能 |
|---|---|
<iostream> |
cout 输出、cin 输入 |
<string> |
string 字符串 |
<cmath> |
sqrt、pow 等数学函数 |
<vector> |
vector 动态数组(后续章节学习) |
#include <iostream> 的含义:把 iostream 这份说明书交给编译器,此后代码中出现 cout,编译器能查到它的定义。
为什么集中在文件开头
#include 在编译之前处理:预处理器把头文件内容展开到该指令所在位置。顺序因此重要——必须先有说明书,后续代码才能使用说明书中的名字。行业惯例:所有 #include 集中放在文件顶部。
本课示例包含了两个头文件:
#include <iostream>
#include <string>
using namespace std;
int main() {
string name = "CppStudio";
cout << "你好," << name << endl;
return 0;
}
string 来自 <string>,cout 来自 <iostream>。删除 #include <string> 再运行,编译器会报 use of undeclared identifier 'string'——这是缺少说明书的直接后果。
尖括号与引号
#include <iostream>:尖括号,标准库头文件,编译器到标准库目录查找;#include "myutil.h":引号,自己编写的头文件,编译器先在项目目录查找。
入门阶段的程序都是单文件,只涉及尖括号形式;多文件工程出现在后续阶段。
常见错误
- 忘记包含:报
use of undeclared identifier。看到「未声明」,先查头文件; - 头文件名拼错:如
<iostram>,报file not found; - 末尾加分号:
#include <iostream>;是错的——#include 是预处理指令,不是 C++ 语句,不需要分号。
下一课:using namespace std 这行代码究竟做了什么。
常见问题
#include <iostream> 里的 iostream 是什么?
iostream 是 C++ 标准库的头文件,提供输入输出功能,cout 和 cin 都由它提供。名称是 input-output-stream(输入输出流)的缩写。
尖括号 <> 和引号 "" 有什么区别?
尖括号用于标准库头文件,编译器到标准库目录查找;引号用于你自己编写的头文件,编译器先在项目目录查找。入门阶段几乎都使用尖括号。
#include 是不是把文件复制进来?
可以这样理解:预处理器在编译前把头文件内容展开到
忘记
编译器报 use of undeclared identifier(未声明的标识符),例如不认识 cout。看到某个名字「未声明」,首先检查对应的头文件是否已包含。