关于宏是否修改参数值

One-_-Piece 2013-09-25 10:49:24
如下代码,值value没有改变,为什么?宏不是简单的文本替换吗?
#define CROL( value, bits )  ( ( value << bits ) | ( value >> ( 0x20 - bits ) ) )
unsigned int value = 0xaffffffa;
CROL( value, 2 );
printf( "0x%x\n", value );


下面这样就改变了:
	unsigned int value = 0xaffffffa;
printf( "0x%x\n", CROL( value, 2 ) );
...全文
319 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
To_be_sky 2013-09-27
  • 打赏
  • 举报
回复
宏是整个替换,替换的是CROL( value, 2 )!
wb23222 2013-09-27
  • 打赏
  • 举报
回复
宏展开后是一个表达式,表达式中参与位运算的value其实并未被改变~~这个printf( "0x%x\n", CROL( value, 2 ) );语句打印的就是整个宏展开后表达式的值~~两个打印语句本质就不一样的~~一个打印的是value的值~~第二个打印的是这个表达式的值
赵4老师 2013-09-26
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
Adol1111 2013-09-26
  • 打赏
  • 举报
回复
1、上面的语句输出的是value的值,下面的语句输出的是CROL( value, 2 )的值,这两者本身就不一样。 2、这个宏里没有赋值语句,所以value << bits之类的不会修改value的值 你在printf( "0x%x\n", CROL( value, 2 ) );下面再加一句printf( "0x%x\n", value );看看值有没有变化
AnYidan 2013-09-26
  • 打赏
  • 举报
回复
google 表达式的值
  • 打赏
  • 举报
回复
为什么楼主觉得value的值要改变,CROL( value, bits )这个宏有改变value的值吗?value没有赋值运算啊
max_min_ 2013-09-26
  • 打赏
  • 举报
回复
宏只是简单替换代码而已!不会有任何安全检查的或者其他动作!
aizibion 2013-09-25
  • 打赏
  • 举报
回复
一个打印变量value的值,一个打印表达式( value << bits ) | ( value >> ( 0x20 - bits ) )的结果,不一样也没什么奇怪的啊
zhaokai115 2013-09-25
  • 打赏
  • 举报
回复
自己动手把宏替换一下就知道了:变量的值没有改变。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧