在C++中,引用头文件有几种不同的方式,主要包括:
1. #include <...>
和 #include "..."
这两种引用头文件的方式是最常用的,它们在功能上相似,但有一些重要的区别:
1.1 #include <...>
这种方式通常用于包含标准库头文件或第三方库的头文件。
- 查找顺序:编译器首先在系统路径(例如标准库路径或指定的库路径)中查找头文件。
- 适用场景:用于引用系统自带的标准库或安装的第三方库,如
#include <iostream>
,#include <vector>
等。
1.2 #include "..."
这种方式用于包含用户自定义头文件或本地项目中的头文件。
- 查找顺序:编译器会先在当前工作目录或项目路径下查找该文件,如果找不到,则会在系统路径中继续查找。
- 适用场景:通常用于引用项目中的头文件,如
#include "myheader.h"
。
主要差异:
<...>
用于标准库和第三方库的头文件。"..."
用于本地项目文件,优先从当前目录查找。
(1)例如使用标准库和第三方库的头文件时,使用 #include <......>格式,此时编译器会首先在系统路径(例如标准库路径或指定的库路径)中查找头文件。
#include <iostream>
#include <stdio.h>
#include <vector>
#include <cstring>
(2)当用户进行模块化编程时,会自定义头文件在当前项目的目录下,此时使用 #include "......" 格式来调用头文件,编译器会先在当前工作目录或项目路径下查找该文件,如果找不到,则会在系统路径中继续查找。
下面我将CPerson类声明在person.h这个头文件中(路径:D:\VSCODE\CPP\C++开发手册\面向对象\person.h)
//类的声明
#include <iostream>
class CPerson
{
public:
int m_iIndex;
char m_cName[25];
short m_shAge;
double m_dSalary;
short getAge();
int setAge(short sAge);
int getIndex();
int setIndex(int iIndex);
char* getName();
int setName(char* cName);
double getSalary();
int setSalary(double dSalary);
void showInfo();
};
后续我在person.cpp中调用该头文件,实现模块化编程,此时编译器则会优先在我当前的工作路径下查找我的头文件 person.h
#include "person.h"
#include<cstring>
#include<iostream>
short CPerson::getAge()
{
return m_shAge;
}
int CPerson::setAge(short sAge)
{
this->m_shAge=sAge;
return 0;
}
int CPerson::getIndex()
{
return m_iIndex;
}
int CPerson::setIndex(int iIndex)
{
this->m_iIndex=iIndex;
return 0;
}
char* CPerson::getName()
{
return m_cName;
}
int CPerson::setName(char* cName)
{
strcpy(m_cName,cName);
return 0;
}
double CPerson::getSalary()
{
return m_dSalary;
}
int CPerson::setSalary(double dSalary)
{
this->m_dSalary=dSalary;
return 0;
}
void CPerson::showInfo()
{
std::cout<<"Name: "<<this->m_cName<<"\n"
<<"Age: "<<this->m_shAge<<"\n"
<<"Salary: "<<this->m_dSalary<<"\n"
<<"Index: "<<this->m_iIndex<<std::endl;
}
int main()
{
CPerson *person=new CPerson();
person->setAge(25);
person->setName("Jack");
person->setSalary(50000);
person->setIndex(3);
person->showInfo();
return 0;
}
下面该谈谈它们分别的好处了:
(一)#include <......>
#include <...>
适用于引用标准库和第三方库文件,确保代码的标准化和兼容性。
标准库文件 和 第三方库文件 通常被安装到系统路径中,使用#include <...>
更为合适。这样做可以确保头文件的版本一致性,避免不同项目之间发生冲突。
#include <...>
有助于标准化系统库的管理,保证项目依赖的库是系统提供的或第三方已安装的库,提升了代码的可维护性。
- 标准库引用便捷:这是标准库文件的惯用方式,比如引用
<iostream>
,<vector>
,<string>
等,编译器可以快速定位到这些头文件。 - 避免项目目录污染:使用
#include <...>
可以确保你不会不小心引用到项目中的同名文件,因为它会优先在系统路径中查找。 - 第三方库的管理:通过标准的系统路径管理第三方库头文件,使项目结构更加清晰。
(二)#include"......"
#include "..."
则更适合本地项目文件的引用,方便项目管理和灵活开发。
本地项目文件 使用#include "..."
可以更好地模块化管理项目代码,同时本地查找速度更快。
#include "..."
则在团队协作中更具灵活性,项目成员可以轻松管理和引用本地头文件,项目内部的文件组织也更加清晰明了。
- 方便管理项目头文件:开发者可以很方便地管理自己编写的头文件,引用项目内不同文件夹中的头文件使代码模块化。
- 项目的灵活性:支持在项目结构内引用文件,便于本地开发。例如,引用与当前代码文件相关联的头文件,使得项目可以跨不同平台和环境运行。
- 更高的控制权:开发者可以灵活设置头文件查找路径,编译器先查找本地文件,避免和系统或第三方库的文件冲突。