多行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"