永发信息网

c语言define以及取地址的问题

答案:2  悬赏:10  手机版
解决时间 2021-03-08 08:29
#define SWAP_2(x) ( (((x) & 0xff)<< 8) | ((unsigned short)(x) >> 8) )
#define SWAP_4(x) ( ((x) << 24) |(((x) << 8) & 0x00ff0000) | \
(((x) >> 8) & 0x0000ff00) | ((x) >> 24) )
#define FIX_SHORT(x) (*(unsigned short*)&(x) = SWAP_2(*(unsigned short *)&(x)))
#define FIX_LONG(x) (*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))
#defineFIX_FLOAT(x) FIX_LONG(x)

两个问题,一是FIX_LONG(x)这个操作的过程是怎样的,二是最后一条define是什么意思,单纯的表示FIX_FLOAT(x)与FIX_LONG(x)一样吗?
最佳答案
#define是字符串替换,#define FIX_LONG(x) (*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))就是在代码中写FIX_LONG(x)就等于写了(*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))。这个表达式的意思是将值x的地址强制为unsigned int*型指针再取其内容作为函数SWAP_4的实参,经函数SWAP_4操作后将其返回值赋给经地址强制转换后的变量x。第二个问题就是经#defineFIX_FLOAT(x) FIX_LONG(x)后,代码中写中写FIX_FLOAT(x)和写FIX_LONG(x)效果是一样的,也就是写FIX_FLOAT(x)的意思也是(*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))了。供参考……
全部回答
你的理解是不对的, #ifdef global_variables_here #undef extern #define extern #endif 应该这样理解: 如果定义了global_variables_here 不管extern是否定义过,都取消他之前的定义 重新定义extern 这种做法的目的在于防止extern重定义,比如你在另外一个文件中定义过了extern的话,你不做#undef的操作,直接在现在这个文件中#define extern是错误的做法,因为编译器不知道该用哪个宏定义。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
i3和i5有什么不一样?哪一个更好一些?买电脑
乡村地锅柴鸡在什么地方啊,我要过去处理事情
汉川市孝感雅洁干洗中心在哪里啊,我有事要去
linux怎么发音有定论么
求Ashlynn Brooke(艾诗琳•布鲁克)的种子或
曲靖交通集团曲靖片区生活小区北门在哪里啊,
九月九日忆山东兄弟 诗中传诵千古的名句是什
下图表示一项重要的生物技术,对图中物质a、b
我的世界手机版指令反回最后一次死亡地点
微信认证对公账户验证后还需要微信认证吗
梦见牛蛙成群往外跳是什么意思
测电笔中的氖管起辉电压为86.6V,把它接到70.7
为什么男女约会要去咖啡馆?
如何进行无线数据传输系统现场测试?
洞天公园地址有知道的么?有点事想过去
推荐资讯
户内是什么意思
0.5比0.2化成后项是一百的比
历史总也学不好,我背了也不行,每次都七十多分
拾物试验阳性见于A.踝关节结核B.腰椎结核C.膝
使用色彩漂亮的蘑菇会有怎样的后果?
关于X的一元二次方程X的平方+2X+K+1=0 的实数
下列行为不属于忠实履行义务的有BA. 上课时自
QQ炫舞怎样将一个号上的物品赠送给另外一个号
退伍军人工龄如何计算
旅游带什么吃的好(黄山)
银来宾馆在什么地方啊,我要过去处理事情
睢阳区商丘河南德飞胜大种业在什么地方啊,我
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?