有時候我們看代碼會遇到類似下面的代碼:
#define NSD_REPORT_ERROR(eSeverity, ePackage, lFunctionality, hr, msg, bAssert) \
{ \
if (FAILED(hr)) { \
LOG_MODULE_NOTIFY(0, 0, "%s hr=%x.", msg, hr); \
if (bAssert) ASSERT(FALSE); \
} \
}
那麼,每句後面的斜槓是什麼作用? 下面的解釋來自互聯網。
參考百度知道
斜槓有個正式的名稱叫做續行符,在普通代碼行後面加不加都一樣(VC是自動判斷續行的),但是在宏定義裏面就特別有用,因爲宏定義規定必須用一行完成:
#define SomeFun(x, a, b) if(x)x=a+b;else x=a-b;
這一行定義是沒有問題的,但是這樣代碼很不容易被理解,以後維護起來麻煩,如果寫成:
#define SomeFun(x, a, b)
if (x)
x = a + b;
else
x = a - b;
這樣理解是好理解了,但是編譯器會出錯,因爲它會認爲#define SomeFun(x, a, b)是完整的一行,if (x)以及後面的語句與#define SomeFun(x, a, b)沒有關係.這時候我們就必須使用這樣的寫法:
#define SomeFun(x, a, b)\
if (x)\
x = a + b;\
else\
x = a - b;
注意:最後一行不要加續行符啊.VC的預處理器在編譯之前會自動將\與換行回車去掉,這樣一來既不影響閱讀,又不影響邏輯,皆大歡喜.