c语言防止头文件重复,c++头文件出错

  c语言防止头文件重复,c++头文件出错

  为了避免同一个文件被多次包含,C/C中有两种方法,一种是#ifndef,另一种是#pragma。

  一次模式。这两种方法在能够支持它们的编译器中并没有太大的区别,但是它们之间还是有一些微妙的区别。

  方法1:

  #ifndef __SOMEFILE_H__

  #define __SOMEFILE_H__

  .//声明和定义语句

  #endif

  方法二:

  #杂注一次

  .//声明和定义语句

  C/C语言标准支持#ifndef的方式。既能保证同一个文件不会被多次包含,又能保证两个内容完全相同的文件(或代码片段)不会被意外地同时包含。

  当然,缺点是如果不同头文件中的宏名不小心“撞车”,可能会导致你看到头文件明明存在,编译器却坚持声明找不到。这种情况有时候很让人抓狂。

  由于编译器每次都需要打开头文件来判断是否有重复的定义,ifndef在编译大型项目时会使编译时间相对较长,所以一些编译器逐渐开始支持#pragma。

  曾经的路。

  #杂注

  一次一般由编译器保证:同一个文件不会被多次包含。注意,这里的“同一个文件”指的是一个物理文件,而不是两个内容相同的文件。您不能在头文件中编译一段代码。

  一次声明,但仅用于文件。

  好处是不用想一个宏名,当然也不会有什么宏名碰撞带来的奇怪问题。从而提高大型项目的编译速度。

  相应的缺点是,如果一个头文件有多个副本,这种方法不能保证它们不会被重复包含。当然,与宏名冲突导致的“声明未找到”问题相比,这种重复包含很容易被发现和纠正。

  #杂注

  曾经在#ifndef之后应运而生,所以很多人可能连听都没听过。目前看来#ifndef更受尊重。因为C/C语言标准支持#ifndef,所以不受编译器的限制;和#pragma

  Once mode不被一些老版本的编译器支持,一些支持的编译器打算去掉它,所以它的兼容性可能不够好。一般来说,程序员听到这个,都会选择#ifndef方法。为了让自己的代码“活”更久,他们通常宁愿降低一些编译性能。这是程序员的个性,当然这是题外话。

  另请参阅将两者放在一起的用法:

  #杂注一次

  #ifndef __SOMEFILE_H__

  #define __SOMEFILE_H__

  .//声明和定义语句

  #endif

  它似乎想兼有两者的优点。但是只要使用#ifndef,就有宏名冲突的危险,不支持#pragma是必然的。

  Once的编译器报错了,所以混合两种方法似乎并不能带来更多的好处,反而会让一些不熟悉的人感到困惑。

  选择哪种方式,你要知道两种方式,要看具体情况。只要有避免缺点的合理约定,我觉得两种方式都可以接受。这不再是标准或者编译器的责任,应该由程序员自己或者小范围的开发规范来完成。

  Btw:我看到一些关于GNU的讨论似乎是针对GCC的。

  3.4(及以上?)取消一次对#pragma的支持。其实我的GCC 3.4.2和GCC 4.1.1还是支持#pragma的。

  曾经,连一个弃用警告都没有,但是GCC2.95会对#pragma产生影响

  一旦提出警告。

  VC6和更高版本也提供了对#pragma的访问

  有了once模式的支持,这个功能应该基本稳定了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: