多行DEFINE指令?

时间:2011-06-08 15:31:35

标签: c++ c compiler-construction

我不是专家,所以对我很轻松。这两个代码段之间是否有任何差异?

#define BIT3 (0x1
<
<
3)
static int a;

#define BIT3 (0x1 << 3) static int a;

另外,有没有办法在一行中写第一个?这种多线风格有什么意义?以下代码是否良好?

#define BIT3 (0x1 << 3)
static int a;

3 个答案:

答案 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"