完美主义

QQ:418104681 上帝要你死在追求完美的道路上

#pragma once与 #ifndef的区别

为了避免同一个文件被include多次

1   #ifndef方式
2   #pragma once方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
    方式一:

    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__
    ... ... // 一些声明语句
    #endif

    方式二:

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


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

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

   方式一由语言支持所以移植性好,方式二 可以避免名字冲突

posted on 2007-10-28 17:53 沈臻豪(foxtail) 阅读(2879) 评论(5)  编辑 收藏 引用 所属分类: C/C++程序设计

评论

# re: #pragma once与 #ifndef的区别 2007-10-29 09:50 hlong

多注意点细节问题,很好。  回复  更多评论   

# re: #pragma once与 #ifndef的区别 2007-10-31 19:12

我顶  回复  更多评论   

# re: #pragma once与 #ifndef的区别 2007-11-01 08:49 周辉

楼主太细心了,我一直都没有注意到,谢谢了先  回复  更多评论   

# re: #pragma once与 #ifndef的区别 2008-07-01 09:35 w

顶  回复  更多评论   

# re: #pragma once与 #ifndef的区别 2008-08-21 10:21

挺使用的,谢谢分享了。  回复  更多评论   


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航:



公告

“我们要的是三好学生.”洪小文笑言,数学好,编程好,态度好.当然,仅仅三好也是不够的,“我们只要1%的人.我们一定要找最聪明、最优秀、最顶尖的人才.”

导航

<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

统计

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

相册

C++名库

Friend

GUI和设计方法

Mathematics

Problem

STL网站

工具

精品网站

其他

语言

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

60天内阅读排行