C++中#include注意事项

本文介绍了C++中#include<>与#include的区别,包括引用头文件的不同、用法区别、调用文件顺序及预处理程序指示的差异。同时对比了<string.h>与<string>的功能区别。

1.#include <>与#include""的区别

一、引用的头文件不同

#include< >引用的是编译器的类库路径里面的头文件。

#include“ ”引用的是你程序目录的相对路径中的头文件。

二、用法不同

#include< >用来包含标准头文件(例如stdio.h或stdlib.h).

#include“ ”用来包含非标准头文件。

三、调用文件的顺序不同

#include< >编译程序会先到标准函数库中调用文件。

#include“ ”编译程序会先从当前目录中调用文件。

四、预处理程序的指示不同

#include< >指示预处理程序到预定义的缺省路径下寻找文件。

#include“ ”指示预处理程序先到当前目录下寻找文件,再到预定义的缺省路径下寻找文件。

参考资料来源:百度百科——include

2.与<string.h>的区别

在C++中,#include与#include<iostream.h>的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。
原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是由math.h变来的。
<string.h>是旧的C 头文件,对应的是基于char*的字符串处理函数;是包装了std 的C++头文件,对应的是新的string 类(看下文);
是对应于旧C 头文件的std 版本。(包含std)

<think>我们正在讨论C++中的`#include`预处理指令。根据用户提供的引用和之前的问题,我将系统地解释`#include`的作用、机制和注意事项。 引用[2]已经明确指出:#include的作用是复制粘贴,即将被包含文件的内容原封不动地插入到当前文件中。此外,引用[3]也通过例子说明了包含多个文件时的情况。 因此,我的回答将围绕以下几点: 1. #include的基本作用和原理(复制粘贴) 2. #include的两种形式(尖括号和引号) 3. 头文件的作用(声明定义分离) 4. 使用头文件的注意事项(避免重复包含) 5. using namespace std的关系(引用[1]提到,但用户现在主要问#include) 同时,生成的相关问题将围绕头文件和预处理器展开。 由于用户要求使用中文,并且按照指定格式,我会在回答中注意数学公式的表示(但本问题中可能没有数学公式),以及代码块的格式。 现在开始组织回答: </think>### C++#include的作用详解 `#include`是C++中的**预处理指令**,其核心作用是**将指定文件的内容原封不动地插入到当前文件中**。具体功能如下: #### 1. **基本机制** ```mermaid graph LR A[当前文件.cpp] -->|#include <iostream>| B[复制iostream内容] B --> C[合并后的新文件] ``` - 预处理阶段将头文件内容完整复制到`#include`位置 - 相当于文本替换操作,实际编译的是合并后的文件[^2][^3] - 示例:`main.cpp`包含`header.h`后的等效结构: ```cpp // main.cpp 编译时实际内容 // --- header.h 内容开始 --- void printHello(); // --- header.h 内容结束 --- int main() { printHello(); return 0; } ``` #### 2. **两种包含方式** | **语法形式** | **搜索路径** | **典型使用场景** | |--------------------|--------------------------------------|----------------------| | `#include <filename>` | 编译器标准库目录 | 包含C++标准库头文件 | | `#include "filename"` | 当前目录 → 系统目录 | 包含用户自定义头文件 | 示例: ```cpp #include <iostream> // 标准输入输出库 #include "myheader.h" // 用户自定义头文件 ``` #### 3. **核心功能** - **声明引入**:获取函数/类的声明(非定义) ```cpp // math.h int add(int a, int b); // 函数声明 // main.cpp #include "math.h" int main() { add(3, 5); // 调用已声明的函数 } ``` - **模块化组织**:实现声明定义分离 ```cpp // shape.h(声明) class Circle { public: float area(float radius); }; // shape.cpp(定义) #include "shape.h" float Circle::area(float r) { return 3.14 * r * r; } ``` - **代码复用**:避免重复声明(需配合`#pragma once`或头文件保护)[^3] #### 4. **关键注意事项** 1. **重复包含问题** - 解决方案:使用头文件保护宏 ```cpp // config.h #ifndef CONFIG_H #define CONFIG_H const int MAX_SIZE = 100; #endif ``` 2. **包含顺序原则** - 标准库 → 第三方库 → 自定义头文件 - 示例: ```cpp #include <vector> // 标准库 #include <openssl/aes.h> // 第三方库 #include "myutils.h" // 自定义 ``` 3. **编译过程影响** - 预处理阶段完成文件合并 - 头文件改动会导致所有包含它的文件重新编译 > **性能提示**:大型项目中过度包含头文件会显著增加编译时间,推荐使用前置声明替代不必要的包含[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值