C++为啥最好不要再头文件里头引入头文件——编程小总结(二)

文章讨论了C++中头文件的使用问题,包括过度包含头文件可能导致的编译时间增加、命名冲突和维护困难。建议尽量减少头文件间的相互包含,以及如何通过合理分配定义在源文件和头文件中来优化编译。同时,介绍了使用static和匿名命名空间限制变量和函数的作用域,以增强代码的安全性和防止命名冲突。
摘要由CSDN通过智能技术生成

一、为啥?

在C++中,头文件是用来声明函数、类、变量等的地方,通常会包含一些常量、宏定义、类型定义、函数声明等内容。头文件可以被其他源文件或头文件包含,以便在不同的文件中共享声明和定义。

然而,在头文件中引入其他头文件可能会导致一些问题:

1. 增加编译时间:
当一个头文件被多个源文件或其他头文件包含时,每个文件都需要解析和编译这个头文件。如果这个头文件包含了大量的其他头文件,就会导致编译时间增加。

2. 命名冲突:
当多个头文件包含相同的头文件时,可能会导致命名冲突。这是因为头文件中可能包含相同名称的常量、宏定义、类型定义、函数声明等,这些名称可能会被其他头文件或源文件使用,导致编译错误。

3. 难以维护:
如果一个头文件包含了大量的其他头文件,就会使代码变得复杂和难以维护。当需要修改某个头文件时,可能会影响到其他头文件和源文件,从而增加了代码维护的难度。

因此,最好不要在头文件中引入其他头文件,而是在源文件中包含需要的头文件。这样可以减少编译时间、避免命名冲突,也更容易维护代码。当然,在某些情况下,为了方便使用和提高代码复用性,引入其他头文件也是可以接受的,但需要权衡利弊。

二、原则

将需要分配空间的定义放在源文件 例如:

需要分配空间不需要分配空间
函数的定义 (需要为函数代码分配空间)类声明
命名空间作用域中变量的定义(需要为变量分配空间)外部函数声明
外部变量声明
基本数据类型常量的声明
内联函数

⚠️⚠️⚠️警告:如果错误分配了空间的定义写入头文件中,在多个源文件包含该头文件时,会导致空间在不同的编译单元中被分配多次,从而在连接时引发错误。

三、如何将变量和函数限制在编译单元内?

命名空间作用域的声明的变量和函数,在默认情况下都可以被其他编译单元访问,但是有时候就是不希望一个源文件中定义多的命名空间作用域的变量和函数被其他源文件引用。这种需求主要是出于两个原因:

①安全考虑,不希望将一个只会在文件内使用的内部变量,或函数暴露给其他编译单元,就像不想暴露私有人员一样。
②防止命名冲突:对于大工程来说,不同文件之中的只在文件内使用的变量名很容易重名,如果将它们暴露出来,在连接时候很容易发生名字冲突。

解决方法:
老方法🎈:static关键字 起到和entern相反的作用,会使得被static修饰的变量 和函数无法被其他编译单元引用
新方法🎈: 使用匿名的空间命名

namespace{ //匿名的命名空间
int a;
void fun(int n)
{
n++;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿天堂没有C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值