MFC 預編譯指令 類演示

2021-06-18 14:52:00 字數 1491 閱讀 4129

預編譯指令在乙個工程中的簡單用法

比如乙個animal類,下面派生出乙個fish類

為了方便起見,每個類就乙個呼吸breath方法,來區分呼叫

新增如下 cpp檔案和標頭檔案,其中類的定義放在標頭檔案中,類的成員實現放在cpp檔案中

你要在cpp檔案中包含相應的標頭檔案,否則找不到類的定義

下面開始寫**

首先 animal.h

class animal

;

相應的animal.cpp中
#include "animal.h"

#include animal::animal()

{}void animal::breath()

;

相應的fish.cpp中

#include "fish.h"

#include fish::fish(){}

void fish::breath()

主函式要包含animal.h 和 fish.h 標頭檔案 

好了我們編譯

結果編譯器報錯 : error c2011: 'animal' : 'class' type redefinition 類重複定義 為什麼呢???

下面請分析程式!

當程式從主函式進入時首先展開animal.h標頭檔案 並定義了animal類

然後又展開fish.h標頭檔案,但這時,fish.h標頭檔案中又包含了animal.h標頭檔案,又開始定義animal類,發現已經定義了 錯誤找到了

但是怎麼解決呢?就要用到預編譯指令了

#ifndef ***  //如果沒定義***

#define *** //那麼就定義***

#endif// 結束

下面把animal.h 和 fish.h 中修改為

#ifndef animal_h

#define animal_h

class animal

;#endif

#include "animal.h"

#ifndef fish_h

#define fish_h

class fish:public animal

;#endif

在次編譯,無錯誤!!! 分析一下,像上面當展開fish.h標頭檔案時,前面已經定義了animal_h 當再次試圖定義時就不會執行了!!!

有人會問 animal_h 和fish_h有什麼用呢?

animal_h 和 fish_h 其實沒啥用,它倆只是乙個標誌,要麼你拿什麼來判斷類是否定義過了呢?

它們儲存在編譯器的全域性變數裡,你可以理解為咱們一般寫程式時的flag 

C 預編譯指令

下面對c 中的預編譯指令進行介紹 1.define和 undef 用法 define debug undef debug define告訴編譯器,我定義了乙個debug的乙個符號,他類似乙個變數,但是它沒有具體的值,可以將它看為乙個符號而已。undef就是刪除這個符號的定義。如果符號debug沒定義...

pragma預編譯指令

它的作用是設定 編譯器的狀態或者是指示編譯器完成一些特定的動作。其格式一般為 pragma para。其中para 為引數,下面來看一些常用的引數 message 引數能夠在編譯資訊輸出視窗中輸出相應的資訊,這對於 源 資訊的控制是非常重要的。其使用方法為 1 pragma message 訊息文字...

Unity Shader預編譯指令

我們在unity中最常見的就是下面前兩種,使用就不必介紹了,這裡會針對其它一些較為常用的編譯指令做一下詳細介紹。1 pragma vertex name 編譯name函式為頂點著色器 2 pragma fragment name 編譯name函式為片段著色器 3 pragma geometry na...