今天发现格式化工具在格式化代码时候把下面这行
#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
结论
从结果看来看两个的值都一样,所以在写宏定义时候用\
是不会导致预编译时也换行的,还是在一行上。