今天發現格式化工具在格式化代碼時候把下面這行
#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
結論
從結果看來看兩個的值都一樣,所以在寫宏定義時候用\
是不會導致預編譯時也換行的,還是在一行上。