#ifndef Unit1H // --> 如果程式中之前都沒有定義(define)"Unit1H"的話,就將這行以下到#endif之前的內容複製進來。
#define Unit1H // --> 在此處定義(define)"Unit1H"
............
............
#endif // --> 表示上述的編譯判斷到此為止
如果您將上述三行註解掉,並且在Unit1.cpp中,故意再重複打一次#include "Unit1.h",
.....
#include "Unit1.h"#include "Unit1.h" // 故意多打一次
.....接著執行此結果,您將得到重複宣告Form1的錯誤,原因是include會將指定要include進來的Unit1.h的內容複製一份進來,所以當您再include相同的東西時,其實就又再複製一份進來,因此就重複了。
但如果在include前,先判斷這個部分之前是否已include進來過了?如果是的話,也就是說已經定義了"UNIT1H",就跳過或者說不把Unit1.h的資料複製進來,因此避免了資料重複載入的問題。
==================================================
typedef struct tagA{ ----> 跟取 struct tagA 這樣有何不同
..
} A;
typedef可以讓您使用定義變數的方式去定義您的自定資料型態,也就是說您經由typedef定義的那個"變數",就成了一個新的自定資料型態,個人覺得typedef是個非常重要的自定型態使用方法。
試著看下述例子:(您應該可以知道您要的答案了) void __fastcall TForm1::Button1Click(TObject *Sender)
{ int myData;typedef int myType;
myType a, b;
a=10;
myData=30;
}
..
} A;
typedef可以讓您使用定義變數的方式去定義您的自定資料型態,也就是說您經由typedef定義的那個"變數",就成了一個新的自定資料型態,個人覺得typedef是個非常重要的自定型態使用方法。
試著看下述例子:(您應該可以知道您要的答案了) void __fastcall TForm1::Button1Click(TObject *Sender)
{ int myData;typedef int myType;
myType a, b;
a=10;
myData=30;
}
===========================================================
巨集可用來簡化程序及資料,當您定義了一個巨集並在程式敘述中使用了它,那麼編譯器就會在編譯程式時將巨集展開,以 BCB Help 中的範例為例:
#define HI "Have a nice day!"
ShowMessage(HI);
編譯器會在編譯時,將前一行的敘述展開成為:
ShowMessage("Have a nice day!");
如果您另外定義了一個巨集如下:
#define MYDEF AnsiString test;
MYDEF
test = "aa";
ShowMessage(test);
編譯時將會展開如下:
AnsiString test;
test = "aa";
ShowMessage(test);
#define HI "Have a nice day!"
ShowMessage(HI);
編譯器會在編譯時,將前一行的敘述展開成為:
ShowMessage("Have a nice day!");
如果您另外定義了一個巨集如下:
#define MYDEF AnsiString test;
MYDEF
test = "aa";
ShowMessage(test);
編譯時將會展開如下:
AnsiString test;
test = "aa";
ShowMessage(test);
没有评论:
发表评论