把一個預處理指示寫成多行要用“\”續行,因為根據定義,一條預處理指示只能由一個邏輯代碼行組成。
而把C代碼寫成多行則不必使用續行符,因為換行在C代碼中只不過是一種空白字符,在做語法解析時所有空白字符都被丟棄了。
在Linux的shell命令中亦可使用該換行符,在擊回車鍵之前輸入“\”,即可實現多行命令輸入。
注意:這種續行的寫法要求“\”后面緊跟換行符,中間不能有任何其他的字符。
例:
#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do {\
((u16_t *)(addr))[0] = HTONS((addr0));\
((u16_t *)(addr))[1] = HTONS((addr1)); \
((u16_t *)(addr))[2] = HTONS((addr2)); \
((u16_t *)(addr))[3] = HTONS((addr3));\
((u16_t *)(addr))[4] = HTONS((addr4)); \
((u16_t *)(addr))[5] = HTONS((addr5)); \
((u16_t *)(addr))[6] = HTONS((addr6));\
((u16_t *)(addr))[7] = HTONS((addr7)); \
} while(0)
----------------------------------------------------------------------------------
續行符
宏定義規定,宏定義必須在一行里完成。所以用#define定義宏定義時,有時為了閱讀方便,就加續行符"\"來換行。在普通代碼行后面加不加都一樣(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的預處理器在編譯之前會自動將"/"與換行回車去掉,這樣一來既不影響閱讀,又不影響邏輯。
注意:最后一行不要加續行符。
