Ada*_*m S 51 c c++ compiler-construction
我不是专家,所以对我很轻松.这两个代码段之间是否有任何差异?
#define BIT3 (0x1
<
<
3)
static int a;
Run Code Online (Sandbox Code Playgroud)
和
#define BIT3 (0x1 << 3) static int a;
Run Code Online (Sandbox Code Playgroud)
还有,有没有办法在一行中写第一个?这种多线风格有什么意义?以下代码是否良好?
#define BIT3 (0x1 << 3)
static int a;
Run Code Online (Sandbox Code Playgroud)
Oli*_*rth 82
如果你有一个非常复杂的宏,如果它只在一行上很难读取,那么多行宏很有用(虽然不建议使用非常复杂的宏).
通常,您可以使用行继续符来编写多行定义\.所以,例如
#define MY_MACRO printf( \
"I like %d types of cheese\n", \
5 \
)
Run Code Online (Sandbox Code Playgroud)
但是你不能用你的第一个例子做到这一点.你不能这样分割令牌; 该<<左移操作人员必须始终没有任何空格分开写,否则会被解释为两个低于运营商.也许:
#define BIT3 (0x1 \
<< \
3) \
static int a;
Run Code Online (Sandbox Code Playgroud)
这相当于你的第二个例子.
[虽然我不确定那个宏怎么会有用!]
pho*_*xis 21
例如:
#define fact(f,n) for (f=1; (n); (n)--) \
f*=n;
Run Code Online (Sandbox Code Playgroud)
您可以使用\角色分隔线条.请注意,它不是特定于宏的.\只要您希望打破一条长线,就可以在代码中添加该字符.
第一个不应该工作.行应该用反斜杠分隔换行.像这样:
#define SOME_MACRO "whatever" \
"more" \
"yet more"
Run Code Online (Sandbox Code Playgroud)