C++中引用头文件方式的特点和差异,作用

在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 "..." 则在团队协作中更具灵活性,项目成员可以轻松管理和引用本地头文件,项目内部的文件组织也更加清晰明了。

  • 方便管理项目头文件:开发者可以很方便地管理自己编写的头文件,引用项目内不同文件夹中的头文件使代码模块化。
  • 项目的灵活性:支持在项目结构内引用文件,便于本地开发。例如,引用与当前代码文件相关联的头文件,使得项目可以跨不同平台和环境运行。
  • 更高的控制权:开发者可以灵活设置头文件查找路径,编译器先查找本地文件,避免和系统或第三方库的文件冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值