C語言宏定義 '\'不會換行

今天發現格式化工具在格式化代碼時候把下面這行

#define LC_SET(s) s = __LINE__; case __LINE__:

格式化成:

#define LC_SET(s) \
    s = __LINE__; \
    case __LINE__:

看到這樣被嚇了一跳,如果

s = __LINE__; \
case __LINE__:

這兩行不在同一個位置時候,即__LINE__的值不一樣,程序會出錯;爲了驗證這樣是否正確,寫了個測試代碼:

#include "stdio.h"

#define TEST      \
    a = __LINE__; \
    b = __LINE__

int main(void)
{
    char a, b;
    TEST;
    printf("a=%d b=%d", a, b);

    return 0;
}

輸出:a=10 b=10

結論

從結果看來看兩個的值都一樣,所以在寫宏定義時候用\是不會導致預編譯時也換行的,還是在一行上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章