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