防止頭文件被重複包含的兩種方法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章