C/C++防止头文件被重复包含(#pragma once 与 #ifndef 的区别)

主要的方式有两种:
**
1 #ifndef方式
2 #pragma once方式
**
(1)

#ifndef _TEST_H_    //——1
#define _TEST_H_    //——2
//加入各种变量,函数声明
#endif              //——3

以上代码:如果没有定义TEST_H变量,就继续往下执行,如果定义了,就直接endif,即不做任何操作。
如果一个文件中包含了两个同样的头文件,那么第一次调用这个头文件的时候,没有定义TEST_H,经过1,到达2,定义TEST_H,进行代码段的执行,到3结束。但是当第二次调用头文件时,已经定义了TEST_H,所以就不会进行下面的代码声明了。这就是条件编译进行防止头文件包含的原理
所以可以用条件编译语句进行防止一个文件中重复包含头文件。
这个方法被广为人知,但是,一般在一个工程中,我们至少要加入main.cpp,function.cpp,function.h三个文件。一个为主函数文件,一个为头文件,用于声明变量,类,类模板或函数等,功能文件用来定义函数。通常我们在main.cpp和function.cpp都会引入#include “function.h”文件。
(2)

//方式一:
#ifndef _SOMEFILE_H_
#define _SOMEFILE_H_
//.......... // 一些声明语句
#endif
//方式二:
#pragma once
//... ... // 一些声明语句

#pragma once方式:则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一 由语言支持所以移植性好,方式二 可以避免名字冲突。

发布了39 篇原创文章 · 获赞 37 · 访问量 1968

猜你喜欢

转载自blog.csdn.net/weixin_43831728/article/details/103131294