使用C/C++宏可以很容易地自動生成長結構。例如,如果我想要一個巨大的一套方法不曾經拋出異常(必須爲COM暴露的方法),我可以做這樣的事情:如何使預處理器插入換行符進入宏擴展結果?
#define BEGIN_COM_METHOD\
try{
#define END_COM_METHOD\
return S_OK;\
} catch(exception&) {\
// set IErrorInfo here\
return E_FAIL;\
}
做出這樣的宏管理可以使用「\」字符使宏定義成爲多行並且更具可讀性。
問題是,有時這些構造的代碼不會編譯 - 某些東西不會像預期的那樣擴展,並且編譯器會出現無效的代碼。編譯器通常具有「生成預處理文件」選項以向開發人員顯示預處理結果。但是在預處理文件中,宏被擴展爲一行,結果幾乎不可讀。
是否有可能使預處理器保持宏定義中的換行符?
你已經發現了一個宏不應該被使用的情況之一。混淆的控制流程在這裏特別討厭。 – 2010-01-22 13:05:31
@nobugz是的,但我們目前有16個COM暴露方法,我們需要在每個方法中嘗試捕獲和參數跟蹤,並且這些花哨和哨聲必須可維護。 C++沒有提供其他方式來使用宏進行這種擴展。 – sharptooth 2010-01-25 15:43:23