多行DEFINE指令?

我不是专家,所以对我很容易。 这两个代码段有什么区别?

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

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

另外,有没有办法在一行写第一个? 这种多线式的点是什么? 下面的代码好吗?

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

多线macros是非常有用的,如果你有一个非常复杂的macros,如果它们都在同一行上,将会很难阅读(虽然macros是非常复杂的)。

一般来说,您可以使用续行字符\来编写多行定义。 所以,例如

 #define MY_MACRO printf( \ "I like %d types of cheese\n", \ 5 \ ) 

但是你不能用你的第一个例子来做到这一点。 你不能像这样分割令牌。 <<左移运算符”必须始终写成没有任何分隔的空格,否则将被解释为两个“小于”运算符。 所以也许:

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

现在相当于你的第二个例子。

[虽然我不确定这个macros如何有用!]

例如:

 #define fact(f,n) for (f=1; (n); (n)--) \ f*=n; 

你可以用\字符分隔这些行。 请注意,它不是macros特定的。 您可以在代码中添加\字符,只要您想打破长长的一行。

第一个不应该工作。 行应该用反斜线分隔,然后换行。 像这样:

 #define SOME_MACRO "whatever" \ "more" \ "yet more"