VS下头文件使用注意事项

本文介绍C++编程中头文件如何避免循环包含和重复包含的问题,包括使用#pragma once和#ifndef/#define/#endif两种方法。文章还详细解释了在类声明中如何正确引用其他类以避免编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、防止循环包含

A.h中写#include "B.h"
在A.h中可以直接定义类B的对象;比如 B m_b;
而在B.h中不能直接写#include "A.h"
应该写
class A;//声明B是一个外部类。这个必须要用,不能只用#include "A.h",如果只是#include "A.h"而没有class A;则会报错.

Class B
{
A *pA;//声明一个指向A类对象的指针
};
然后在B.cpp中加入#include "A.h"
再在B的构造函数中,使用new方式对pA进行实例化,构建A的类对象,并通过pA在程序中访问

2、防止重复包含

是为了避免同一个文件被include多次使用,
1)、#pragma once(比较常用)
这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次
#pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。
#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。
#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式
2)、使用条件编译

#ifndef _HEADERNAME_H
#define _HEADERNAME_H
...//(头文件内容)
#endif

当头文件第一次被包含时,它被正常处理,符号_HEADERNAME_H被定义为1。如果头文件被再次包含,通过条件编译,它的内容被忽略。符号_HEADERNAME_H按照被包含头文件的文件名进行取名,以避免由于其他头文件使用相同的符号而引起的冲突。但是,必须记住预处理器仍将整个头文件读入,即使这个头文件所有内容将被忽略。由于这种处理将拖慢编译速度,所以如果可能,应该避免出现多重包含。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值