hur.cn - 华软网

 热门搜索

在VS2008下 防止头文件被重用的问题

  作者:未知    来源:网络    更新时间:2011/1/11
#ifndef   _FF
#define   _FF

... 

#endif 


和 #pragrm once  的区别是什么 哪种对照好?
---华软 网友回答---
为了防止统一个资料被include屡次,能够:
1   #ifndef方式
2   #pragma once方式

在能够支持这两种方式的编译器上,两者并没有太大的区别,然则两者依然照旧有一些细微的区别。
    方式一: 
    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 一些声明语句
    #endif

    方式二:

    #pragma once
    ... ... // 一些声明语句


    #ifndef的方式依赖于宏名字不能冲突,这不光能够保证统一个资料不会被包括屡次,也能保证内容完全相同的两个资料不会被不小心同时包括。当然,弱点就是如果不同头资料的宏名不小心“撞车”,可能就会致使头资料明明存留,编译器却硬说找不到声明的状态

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

   方式一由语言支持所以移植性好,方式二 能够防止名字冲突

---华软网友回复---
为了防止统一个资料被include屡次,能够:

1   #ifndef方式
2   #pragma once方式

在能够支持这两种方式的编译器上,两者并没有太大的区别,然则两者依然照旧有一些细微的区别。
    方式一: 
    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 一些声明语句
    #endif

    方式二:

    #pragma once
    ... ... // 一些声明语句


    #ifndef的方式依赖于宏名字不能冲突,这不光能够保证统一个资料不会被包括屡次,也能保证内容完全相同的两个资料不会被不小心同时包括。当然,弱点就是如果不同头资料的宏名不小心“撞车”,可能就会致使头资料明明存留,编译器却硬说找不到声明的状态

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

   方式一由语言支持所以移植性好,方式二 能够防止名字冲突

---华软网友回复---
#pragma once
---华软网友回复---
#pragma once是vc才有的.linux下gcc不认识.      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。