在很多比較複雜的巨集定義中,經常可以看到整個介面被一層do while(0)
給包了起來
#define foo(x) dowhile(0)
這樣定義的是乙個非復合語句,可以確保在類似下面這種情況
if(***)
foo(x)
else
...
可以順利展開,展開後的結果被do while
包了起來
if(***)
do while(0)
else
...
如果沒有加do while而只用乙個花括號的話,巨集在預處理的時候會去掉花括號直接展開成下面這種復合語句,這樣就會報錯了
if(***)
printf("first statement\n");
printf("second statement\n");
else
...
Linux 用make進行巨集編譯
假設現在有main.c haha.c sin value.c cos value.c這4個檔案。若是想要編譯出乙個可執行檔案,則要經歷如下步驟 gcc c main.cgcc haha.cgcc c sin value.cgcc c cos value.cgcc o main main.o haha...
巨集定義中的do while 0
如果你是c 程式設計師,我有理由相信你用過,或者接觸過,至少聽說過mfc,在mfc的afx.h檔案裡面,你會發現很多巨集定義都是用了do.while 0 或do.while false 比如說 define afxassume cond do while 0 粗看我們就會覺得很奇怪,既然迴圈裡面只執...
C 巨集中的do while 0
如果你是 c 程式設計師,我有理由相信你用過,或者接觸過,至少聽說過 mfc,在mfc 的afx.h 檔案裡面,你會發現很多巨集定義都是用了 do.while 0 或do.while false 比如說 define afxassume cond do while 0 粗看我們就會覺得很奇怪,既然迴...