C、传统 C++
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
标准 C++ (同上的不再注释)
#include <algorithm> //STL 通用算法
#include <bitset> //STL 位集容器
#include <cctype>
#include <cerrno>
C++编程语言中,头文件是包含预定义的函数、对象和类型定义的关键部分,它们提供了标准库的功能。头文件分为传统C头文件和标准C++头文件,以及C99新增的一些头文件。
1. **传统C头文件**:
- `assert.h`: 提供断言宏`assert()`,用于在调试时检查程序状态。
- `ctype.h`: 包含字符处理函数,如`isalpha()`, `isdigit()`, `tolower()`等。
- `errno.h`: 定义了错误码常量,如`EAGAIN`, `ENOTDIR`等,以及`errno`全局变量。
- `float.h`: 定义与浮点数相关的常量,如最大值、最小值、精度等。
- `fstream.h`: 用于文件输入/输出,如`ifstream`, `ofstream`类。
- `iomanip.h`: 提供了格式控制,例如设置填充字符和对齐方式。
- `iostream.h`: 定义了`iostream`类,用于基本的输入输出操作。
- `limits.h`: 定义各种数据类型的最值常量,如`INT_MAX`, `CHAR_MIN`等。
- `locale.h`: 支持本地化,定义了`locale`类。
- `math.h`: 提供数学函数,如`sin()`, `cos()`, `exp()`等。
- `stdio.h`: 包含基本的输入/输出函数,如`printf()`, `scanf()`等。
- `stdlib.h`: 定义了杂项函数,如内存分配的`malloc()`, `free()`,以及`exit()`。
- `string.h`: 用于字符串处理,如`strcpy()`, `strlen()`等。
- `strstrea.h`: 提供基于数组的输入/输出流。
- `time.h`: 定义了处理时间的函数,如`time()`和`strftime()`。
- `wchar.h`: 处理宽字符,包括输入/输出。
- `wctype.h`: 宽字符分类,提供如`iswalnum()`这样的函数。
2. **C++标准头文件**:
- `algorithm`: 包含STL中的通用算法,如`sort()`, `find()`, `swap()`等。
- `bitset`: 用于创建和操作位集的STL容器。
- `cctype`, `cerrno`, `clocale`, `cmath`等:与C头文件对应的C++版本,提供C++风格的接口。
- `complex`: 定义了复数类。
- `deque`, `exception`, `fstream`, `functional`, `limits`, `list`, `map`, `iomanip`, `ios`, `iosfwd`, `iostream`, `istream`, `ostream`, `queue`, `set`, `sstream`, `stack`, `stdexcept`, `streambuf`, `string`, `utility`, `vector`: 这些都是STL容器、流、异常处理、模板类等的头文件,构成了C++标准库的核心部分。
3. **C99新增头文件**:
- `complex.h`: 复数处理,提供C语言的复数运算。
- `fenv.h`: 浮点环境管理,允许程序控制浮点运算的行为。
- `inttypes.h`: 整数格式转换,提供了与类型相关的打印和解析函数。
- `stdbool.h`: 定义了布尔类型`bool`和相关的宏。
- `stdint.h`: 整型定义,提供具有固定宽度的整数类型,如`int32_t`, `uint64_t`。
- `tgmath.h`: 通用类型数学宏,根据表达式中实际的类型选择合适的数学函数。
这些头文件是C++程序员日常开发的基础,它们提供了丰富的功能,使得编写高效、可维护的代码变得更加容易。使用这些头文件时,通常会通过`#include`指令将其引入到源文件中,以便访问其中定义的函数、类和对象。在现代C++编程中,使用`<iostream>`而不是`<iostream.h>`,`<cstdlib>`而不是`<stdlib.h>`等,这是因为C++标准更倾向于使用没有`.h`后缀的头文件,以区分C++和C的标准库。同时,习惯上使用`using namespace std;`来简化代码,但这也可能导致命名冲突,因此在大型项目中,推荐使用局部作用域别名或完全限定名称。