用do while進行複雜的巨集定義

2021-10-08 08:02:19 字數 540 閱讀 6072

在很多比較複雜的巨集定義中,經常可以看到整個介面被一層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 粗看我們就會覺得很奇怪,既然迴...