!终于找到在宏定义中用续行符\和/*注释*/能编译通过的方法了!
再次体现出C语法的自由和灵活!(上次是http://topic.csdn.net/u/20120202/11/446d2bd3-e726-4a6e-9533-92dae10358ca.html)
可惜CSDN带汉字的代码行字符宽度不一致导致对齐不好看。
#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
des = WIRTE_UINT(des ,3 ,28 ,2); // 00000000000000000000011001101101
printf("des==0x%08X\n",des);
unsigned int r = READ_UINT(des ,28 ,2);
printf("r==%d\n",r);
return 0;
}
//des==0x0000066D
//r==3
[解决办法]
楼主这你都实验出来了,长见识…
[解决办法]
楼主的意思是说“代码 /*标注*/ \”这种方法【代码 + 标注 + 续行符】吗?
[解决办法]
牛人啊,赵老师V5
[解决办法]
这哥们能得高分,哈哈
[解决办法]
这个,系统的宏都是这么注释的...............
[解决办法]
码痴的标志
[解决办法]
赵老师啊!不多说必须顶!87v5
[解决办法]
+1
[解决办法]
C语言填表式的比较漂亮
[解决办法]
我就迷信赵老师,顶了再看
------解决方案--------------------
好,支持。,。
[解决办法]
精神可嘉,挺不错的!
[解决办法]
分析的有理。
[解决办法]
引用:
注释肯定要加在续行符的前面啊,因为续行符必须出在行尾
而预处理时,对续行符的处理阶段(第二阶段)要早于注释的处理阶段(第三阶段),所以文本分析时续行符不在行尾,也就不会起作用了
退一步来讲,即使注释的处理早于续行符,那么注释会被处理为一个空格,这样,续行符仍旧不是处于行尾位置,所以还是会出错
分析的有理。