巨集的進一步理解

2021-05-27 04:39:41 字數 1928 閱讀 5408

1 條件include

如下

code

#ifndef main_h_

#define main_h_

其它內容

#endif

上面在看到標頭檔案時會看到 作用就是阻止這個標頭檔案被多次include

多次include就會出現重複的定義情況 所以需要在每個標頭檔案中都使用這個定義

如果還不是很了解要怎樣使用 可以看看 c的標準標頭檔案 如fcntl.h

2 條件編譯

如下

code

#ifdef _debug

printf("this debug info\n");

#endif

如果沒有定義_debug巨集的話 那麼上面那一行是不會編譯進去的

但是定義了_debug後 上面那行就會編譯進去 可以寫個簡單的程式測試

code

#include

int main()

第一次使用 gcc -d_debug main.c

第二次使用 gcc main.c

執行兩次的結果看

3 定義為某個值 以便後面修改這個值時不用修改其它地方** 只要修改這個巨集的定義就可以了

如乙個軟體的多語言版本等

如下

code

#include

#define print_str "你好 dd"

main()

編譯時 會把print_str代替成"你好 dd"

以後想修改時就方便了

另外也可以定義為函式

#include

#ifdef _debug

#define a(x) a(x)

#else

#define a(x) b(x)

#endif

int a(int x)

int b(int x)

int main()

[/code]

其實也可以定義成

#define a a

的但是 定義成a(x)後 只有a後面帶乙個(x)型別的 編譯器才會執行替換 比較安全 可以保證只替換函式而不替換變數

第四個可變引數巨集

有些時候定義乙個巨集來代替某個函式 但是這個函式是可變引數的話 那就需要考慮辦法了

定義方法如下

code

#define print(...) printf(__va_args__)

#include

int main()

第五個 巨集組合

也就是## 和 #的用法

## 是連線符號 連線兩個巨集

#是把名字代替成字串

如下code

#define s5(a) supper_ ## a

#include

void supper_printf(const char* p )

int main()

#用法如下

#include

#define s(p) #p

int main()

執行一下就知道了

bufferedReader進一步理解

public static void main string args string mystring system.out.println 請輸入明文 bufferedreader buf new bufferedreader new inputstreamreader system.in try...

進一步理解委託

前面一篇文章介紹了委託的基本知識,接下來就進一步研究一下委託。其實,剛開始覺得委託型別是乙個比較難理解的概念,怎麼也不覺得下面的 assembleiphonehandler 是乙個型別。public delegate void assembleiphonehandler 按照正常的情況,如果我們要建...

前端進一步理解

非常開心能夠在這裡作工作匯報和個人總結,這是我鼓起勇氣的結果,算是成功了一半,呵呵。從剛來公司茫然失措的菜蛋到現在稍顯成熟的菜鳥,我知道我離成功又進了一步。以下是我對前端的理解和對自己這段時間的總結 一 前端職責 前端開發是由網頁製作演變而來的,它的主要職能就是把 的介面更好地呈現給使用者,主要包括...