C++:避免类重复包含的两种方式(#if _MSC_VER > 1000 #pragma once #endif 和 #ifndef#define... #endif )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dashumak/article/details/81285757

避免类重复包含的方式有两种

一、微软预编译控制

#if _MSC_VER > 1000

#pragma once

#endif

在.h文件最开始的地方加上这段代码,即可避免头文件重复include。但是需要注意的是#pragma once 这条语句只有VC编译器大于1000才可以支持(反正VC++6.0及以上是可以的),_MSC_VER就是Microsoft的C编译器的版本。

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

二、宏定义方式

#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__ 
... ... // .h文件正文
#endif

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况 。不过如果是编译器自动生成的类一般都会自动根据编译次数(唯一)来自动生成唯一的宏名。

猜你喜欢

转载自blog.csdn.net/dashumak/article/details/81285757
今日推荐