放牧代码和思想
专注自然语言处理、机器学习算法
    时间有限,只有GitHub上的issue能及时处理,大约每周末一次。另外,不要叫我楼主,谢谢。

防止头文件被重复包含的两种方法

在windows平台下,有一个很方便的宏: #pragma once

指定当前文件在构建时只被包含(或打开)一次,这样就可以减少构建的时间,因为加入#pragma once后,编译器在打开或读取第一个#include 模块后,就不会再打开或读取随后出现的相同#include 模块.

另外,还可以用条件编译语句来实现:

#ifndef "XX_H"

#define "XX_H"

<头文件定义正文>

#endif

显然后者的移植性更好一点。

有下面的自定义结构体,定义在sample.h中。
——————————————–
typedef struct sample{
int trueNumber;
double feature[13];
}SAMPLE;
——————————————–

类A,类B都#include<sample.h>,主程序都调用了类A,类B;就会出现

error C2011: ”sample” : ”struct” type redefinition

解决方法:写上宏定义:

———————————–
#ifndef sample_H_H
#define sample_H_H
   typedef struct sample{
   int trueClass;
   double feature[13];
}SAMPLE;
#endif
—————————————

也可以这样写

———————————-
#if !define sample_H_H
#define sample_H_H
   typedef struct sample{
   int trueClass;
   double feature[13];
}SAMPLE;
#endif
——————————-

意思是:

if(宏sample_H_H,没有被定义过)
{
      定义宏sample_H_H
      ……..(执行)other code
}
实际上sample_H_H作为一个标记而存在

自定义一个类时,在所有的头文件中都应用这组宏处理
注意是#ifndef不是#ifdef

———————————–
#ifndef 标记名(常以类名_H_H,两个标记名要相同)
#define 标记名

//你原来的文件内容

#endif
———————————

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 防止头文件被重复包含的两种方法

分享到:更多 ()

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    学习啦!!

    昨夜溪风云8年前 (2010-12-15)回复

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机