#ifdef《識別符號》
...//程式段1
#else
...//程式段2
#endif
其中#else
也可以省略,一般可以利用#ifdef debug...不需要編譯的程式段... #endif
這樣的寫法將一些我們暫時不需要用到得程式段進注釋,方便除錯程式。
ifndef是if not defined的簡寫,屬於巨集定義的一種;基本的程式格式如下:
#ifndef 《識別符號》 //先測試該**識別符號**是否被巨集定義過
#define 《識別符號》
程式段1; //如果該識別符號沒有被巨集定義過,定義該識別符號,並編譯程式段 1
...#else
程式段2; //如果該識別符號已經定義過了則編譯程式段2的語句,不再編譯程式段 1
...#endif //必須和#ifndef配合使用,否則會報錯
假如現在我在某個工程下寫了乙個temp.c的檔案,並且想建立乙個對應的標頭檔案來直接呼叫其中的函式,那首先得新建乙個檔案,檔名命名為temp.h,一般標頭檔案的定義格式如下:
#ifndef 《識別符號》
#define 《識別符號》
......//程式段
......
#endif
對於識別符號來說,一般命名為頭檔名的大寫,並在最前面加下劃線,檔名中的「.」也用下劃線代替,如下:
#ifndef _temp_h
#define _temp_h
...... //包含 c 函式宣告和巨集定義等
#endif
使用預處理指令#include
可以引用使用者和系統標頭檔案。
這種形式用於引用系統標頭檔案,比如上面引用的系統標準輸入輸出庫stdio.h,它在系統目錄的標準列表中搜尋名為stdio.h的檔案。
這種形式用於引用使用者標頭檔案,比如上面我們自己定義的標頭檔案temp.h,它在包含當前檔案的目錄中搜尋名為temp.h的檔案。
所以說習慣用#include
這種方式引用各種標頭檔案的話,在編譯的時候就有可能會報錯,有些標頭檔案它在系統目錄的標準列表中是搜尋不到的,如果採用#include "file.h"
這種方式可能編譯就不會報錯(報錯也有可能是其他原因,不一定就是引用方式有問題)。
以上是參考網上的說法加個人拙見,水平有限,如果有不對的地方還請指正。
通常用來定義乙個資料型別,如下:
typedef
unsigned
char u8;
u8 i=
100;
在這裡用u8表示資料型別unsigned char,這樣既直觀又簡潔;
它不僅可以定義一般的資料型別,像結構體等等這些都可以,如下:
#include
typedef
struct box
;int
main()
輸出結果:200
我們通常使用#define 來進行巨集定義操作,在程式中如果大量的使用某一變數,不妨將它進行一下巨集定義,這樣在修改程式的時候回方便很多;
如下:
#include
typedef
unsigned
char u8;
#define length 5
#define init
intmain()
return0;
}
輸出結果:12
345如下:
#include
#define s(a,b) a*b
intmain()
輸出結果:s=40
關於函式的巨集定義:巨集定義的函式會提高**的執行速度(因為不需要再跑到另外乙個位址空間上去呼叫函式)程式在編譯的時候就已經將巨集定義的函式插入到**呼叫處了,所以如果你呼叫乙個巨集定義的函式十次,編譯後的檔案相對正常函式呼叫的編譯檔案就會增大;相反,呼叫函式雖然會增加時間成本,但是記憶體不會增大,不管你呼叫多少次。
c語言中條件編譯相關的預編譯指令
條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 1 ifndef abcd h 2 define abcd h34 some declaration codes56 e...
c語言中條件編譯相關的預編譯指令
條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 1 ifndef abcd h 2 define abcd h34 some declaration codes56 e...
C語言中條件編譯相關的預編譯指令
本文主要介紹c語言的條件編譯指令 條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 ifndef abcd h define abcd h some declaratio...