C語言中續行符“\”說明


把一個預處理指示寫成多行要用“\”續行,因為根據定義,一條預處理指示只能由一個邏輯代碼行組成。

而把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的預處理器在編譯之前會自動將"/"與換行回車去掉,這樣一來既不影響閱讀,又不影響邏輯。
   
    注意:最后一行不要加續行符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM