专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C 教程 » include:避免同一文件多次被include »正文

include:避免同一文件多次被include

来源: 发布时间:星期四, 2009年2月12日 浏览:90次 评论:0


    为了避免同个文件被多次C/C中有两种方式种是#ndef方式种是#pragma once方式在能够支持这两种方式编译器上 2者并没有太大区别但是两者仍然还是有些细微区别
    方式:
    #ndef __SOMEFILE_H__
    # __SOMEFILE_H__
    ... ... // 些声明语句
    #end
    方式 2:
    #pragma once
    ... ... // 些声明语句
    #ndef方式依赖于宏名字不能冲突这不光可以保证同个文件不会被包含多次也能保证内容完全相同两个文件不会被不小心同时包含当然缺点就是如果区别头文件宏名不小心“撞车”可能就会导致头文件明明存在编译器却硬说找不到声明状况——这种情况有时非常让人抓狂
    #pragma once则由编译器提供保证:同个文件不会被包含多次注意这里所说“同个文件”是指物理上个文件而不是指内容相同两个文件带来好处是你不必再费劲想个宏名了当然也就不会出现宏名碰撞引发奇怪问题对应缺点就是如果某个头文件有多份拷贝本思路方法不能保证他们不被重复包含当然相比宏名碰撞引发“找不到声明”问题重复包含更容易被发现并修正
    #pragma once方式产生于#ndef的后因此很多人可能甚至没有听说过目前看来#ndef更受到推崇#ndef受语言天生支持不受编译器任何限制;而#pragma once方式却不受些较老版本编译器支持换言的兼容性不够好也许再过几年等旧编译器死绝了这就不是什么问题了
    我还看到种使用方法是把两者放在:
    #pragma once
    #ndef __SOMEFILE_H__
    # __SOMEFILE_H__
    ... ... // 些声明语句
    #end
    看起来似乎是想兼有两者优点不过只要使用了#ndef就会有宏名冲突危险所以混用两种思路方法似乎不能带来更多好处倒是会让些不熟悉人感到困惑
    选择哪种方式应该在了解两种方式情况下视具体情况而定事实上只要有个合理约定来避开缺点我认为哪种方式都是可以接受而这个已经不是标准或者编译器责任了应当由员来搞定
    btw:我看到GNU些讨论似乎是打算在GCC 3.4(及其以后?)版本取消对#pragma once支持不过我手上GCC 3.4.2和GCC 4.1.1仍然支持#pragma once甚至没有deprecation warningVC6及其以后版本亦提供对#pragma once方式支持我想这特性已经稳定下来了  
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: