读书人

宏可以多行表示吗?解决办法

发布时间: 2013-10-21 17:02:52 作者: rapoo

宏可以多行表示吗?
有些地方的语句是重复的,想用宏来替换,有若干行

比如
x += y;
y += z;
.....



如果写在一行里,感觉看着很乱,能用多行吗?

#define TEST x+=y; y+=z; ......
[解决办法]
"\" 宏换行符


#define TEST \
x+=y; \
y+=z;

[解决办法]
#include <stdio.h>

#define WIRTE_UINT(des ,x ,pos ,len) ( \
(des) \
& \
~( /* 除要修改的位为0,其余都为1 */ \
( \
(1<<(len))-1 /* 长度为len位的1 */ \
) \
<<(32-(pos)-(len)) /* 左移32-(pos)-(len)位 */ \
) \

[解决办法]
\
( \
(x) \
<<(32-(pos)-(len)) \


) \
)
#define READ_UINT(src ,pos ,len) ( \
( \
( \
(unsigned)(src) \
) \
>>(32-(pos)-(len)) /* 逻辑右移32-(pos)-(len)位 */ \
) \
& \
( \
(1<<(len))-1 /* 长度为len位的1 */ \
) \
)

int main() // 1111111111222222222233
{ //bit 01234567890123456789012345678901
unsigned int des = 0x661; // 00000000000000000000011001100001
unsigned int r;

des = WIRTE_UINT(des ,3 ,28 ,2); // 00000000000000000000011001101101
printf("des==0x%08X\n",des);
r = READ_UINT(des ,28 ,2);
printf("r==%d\n",r);
return 0;
}
//des==0x0000066D


//r==3


[解决办法]
引用:
"\" 宏换行符

#define TEST \
x+=y; \
y+=z;

这个叫做折行符
别叫做宏换行符
那样好像只有宏能用似的
"2311\
213"
in\
t i;
puts(\
"fd\
f");

读书人网 >C++

热点推荐