所以, 傳統的結局方案就是這樣使用:
#define MACRO(arg1, arg2) do { \ /* declarations */ \ stmt1; \ stmt2; \ /* ... */ \ } while(0) /* 沒有結尾的 ; */
當調用者加上分號後, 宏在任何情況下都會擴展為一個單獨的語句。 優化的 編譯器會去掉條件為 0 的 ``無效" 測試或分支, 儘管 lint 可能會警告。
如果宏體內的語句都是簡單語句, 沒有聲明或循環, 那麼還有一種技術, 就是寫一個單獨的, 用一個或多個逗號操作符分隔的表達式。 例如, 問題 10.22 的第一個 DEBUG() 宏。這種技術還可以 ``返回" 一個值。
參考資料: [H&S, Sec. 3.3.2 p. 45]; [CT&P, Sec. 6.3 pp. 82-3]。
翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)