在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
---------------------------------