C/C++避免头文件重复包含的方法

C/C++避免头文件重复包含的方法

在实际的编程过程中,因为会使用多个文件,所以在文件中不可避免的要引入一些头文件,这样就可能会出现一个头文件被 include 多次,在C/C++中有几种不同的方式可以解决这个问题,总体功能相差不大,但依然存在细微差别。

1. #ifndef

格式如下:

#ifndef __COMPLEX__
#define __COMPLEX__

//头文件主体

#endif

或者

#ifndef __COMPLEX_H__
#define __COMPLEX_H__

//头文件主体

#endif

作用:相同的两个文件不会被重复包含。

优点:

  1. 受C/C++语言标准的支持,不受编译器的限制。
  2. 不仅仅局限于避免同一个文件被重复包含,也能避免内容完全相同的两个文件(或代码片段)被重复包含。

缺点:

  1. 如果不同头文件中的宏名恰好相同,可能就会导致你看到头文件明明存在,编译器却说找不到声明的情况。
  2. 由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长。

2. #pragma once

格式如下:

#pragma once

//头文件主体

作用:物理上的同一个文件不会被重复包含。

优点:

  1. 避免#ifndef中因为宏名相同导致的问题。
  2. 由于编译器不需要打开头文件就能判定是否有重复定义,因此在编译大型项目时,比#ifndef更快。

缺点:

  1. #pragma once只针对同一文件有效,对相同的两个文件(或代码片段)使用无效。
  2. #pragma once不受一些较老版本的编译器支持,一些支持了的编译器又打算去掉它,所以它的兼容性可能不够好。

3. 混合使用

格式如下:

#pragma once
#ifndef __COMPLEX_H__
#define __COMPLEX_H__

//头文件主体

#endif

混合使用需要注意的是:
1.只要使用了#ifndef就会有宏名冲突的危险。
2.混合使用无法避免不支持#pragma once的编译器报错。
所以混合使用并不一定能得到很好的效果,具体怎么使用,需要视情况而定。

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值