我不是专家,所以对我很轻松。这两个代码段之间是否有任何差异?
#define BIT3 (0x1
<
<
3)
static int a;
和
#define BIT3 (0x1 << 3) static int a;
另外,有没有办法在一行中写第一个?这种多线风格有什么意义?以下代码是否良好?
#define BIT3 (0x1 << 3)
static int a;
答案 0 :(得分:78)
如果你有一个非常复杂的宏,如果它全部在一行上,那么多行宏很有用(虽然不建议使用非常复杂的宏)。
通常,您可以使用行继续符\
编写多行定义。例如,
#define MY_MACRO printf( \
"I like %d types of cheese\n", \
5 \
)
但你不能用你的第一个例子做到这一点。你不能这样分割令牌;必须始终写入<<
左移运算符而没有任何分隔空格,否则它将被解释为两个小于运算符。也许吧:
#define BIT3 (0x1 \
<< \
3) \
static int a;
现在相当于你的第二个例子。
[虽然我不确定该宏会如何有用!]
答案 1 :(得分:20)
例如:
#define fact(f,n) for (f=1; (n); (n)--) \
f*=n;
您可以使用\
字符分隔这些行。请注意,它不是特定于宏的。只要您希望打破长行,就可以在代码中添加\
字符。
答案 2 :(得分:6)
第一个不应该工作。行应该用反斜杠分隔换行。像这样:
#define SOME_MACRO "whatever" \
"more" \
"yet more"