防止头文件的重复包含问题

在我们自己编写 C/C++的头文件时,可能会忽略一点:用一些处理机制来避免头文件的重复包含,因为头文件的内容在预编译时是把头文件的内容完全拷贝到引入的地方替换头文件的包含命令,而包含的头文件可能有包含很多内容,所以要是重复包含头文件,可能会使预编译后的源文件代码冗余量很大,造成空间上的浪费。

1、 #pragma once
2、 #ifndef
  #define
  #endif

它们具体实现如下: 假定此时要保证头文件HeadFile.h不会被重复包含,那么两种方法对应的方式如下:

1、 #pragma once   直接把它放在HeadFile.h文件实现的最前面,即可实现。   

  •     #pragma once
     
  •     //头文件的具体实现

#pragma once由编译器提供保证:同一个文件不会被编译多次。

2、 #ifndef   #define   #endif

  • #ifndef __HEADFILE.H__ 
  •     #define __HEADFILE.H__ 
  •     //头文件的具体实现 
  •    #endif

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。

时间: 2024-10-16 00:26:55

防止头文件的重复包含问题的相关文章

头文件被重复包含,嵌套包含的两层含义

http://www.cnblogs.com/bluestorm/archive/2011/11/04/2298126.html 说明: 写代码的时候头文件命名知道要加 #ifndef xxxx #define xxxx #endif 但是我把实现都放在了 .h文件中,然后出错了...所以头文件包含,只知其一不知其二,恩,就是所谓的 //a.h #ifndef _A_H_ #define _A_H_ int max(int a, int b) { return a > b ? a:b; } #e

两种解决头文件被重复包含方法的联系与区别

在制作C/C++项目的过程中,应该会遇到关于头文件被重复包含的问题,几乎每一个C/C++程序员都应该知道如何来解决这一问题.通常来说,我们通常可以用两种方式来解决这一问题. 第一种 ---- 利用以下形式: #ifndef  __XX_H__                                                                              #ifndef   XX_H #define __XX_H__                    

#ifndef #define #endif 防止头文件被重复引用

想必很多人都看过“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?   其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的.比如:存在a.h文件#include "c.h

qt c++对象头文件如何相互包含

今天在写qt时,遇到了两个类相互包含的问题,类A要用到类B,类B要用到类A. 类A:a.h #ifndef A_H #define A_H #include <b.h> class A { public: A(); }; #endif // A_H a.cpp #include "a.h" A::A() { B b; } 类B:b.h #ifndef B_H #define B_H #include <a.h> class B { public: B(); };

头文件的相互包含会导致错误

互相定义各自的对象会产生: error C2143: syntax error : missing ';' before '*' 无论是定义对象还是定义对象的指针都会报错 这是头文件的相互包含导致的错误

头文件,库文件,重复包含

//a.c #include <stdio.h> #include "a.h" #include "b.h" void main(void) { printf("safadf %d",i); } //a.c end //a.h #include "b.h" //a.h end //b.h int i = 3; //b.h end /*本例中主程序在a.c中定义. 正常情况下,这三个文件都在同一目录下,进入该目录,然

extern 用法,全局变量与头文件(重复定义)

http://www.cnblogs.com/chengmin/archive/2011/09/26/2192008.html 用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用extern呢??这个问题一直也是似是而非的困扰着我许多年了,今天上网狠狠查了一下总算小有所获了: 头文件 首先说下头文件,其实头文件对计算

&lt;bits/stdc++.h&gt;头文件介绍(包含源代码)

注:转自http://blog.csdn.net/charles_dong2/article/details/56909347,同为本人写的,有部分修改. 之前在一个小OJ上刷题时发现有人是这么写的: #include <bits/stdc++.h> ... 百度了一下,发现<bits/stdc++.h>包含了全部的C++头文件.这样做题时直接敲上一句#include <bits/stdc++.h>而不是很多个#include.很方便,对吧? 不过注意,目前POJ还不支

【转载】防止变量重复定义、头文件重复包含、嵌套包含

[转自] http://hi.baidu.com/zengzhaonong/blog/item/8a8871062d481f7f03088106.html #include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h"#include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码.但是下面的代码:#include "a.h"#include "