#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)一样吗?
c语言define以及取地址的问题
答案:2 悬赏:10 手机版
解决时间 2021-03-08 08:29
- 提问者网友:蔚蓝的太阳
- 2021-03-08 01:00
最佳答案
- 五星知识达人网友:舍身薄凉客
- 2021-03-08 01:17
#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)))了。供参考……
全部回答
- 1楼网友:愁杀梦里人
- 2021-03-08 02:05
你的理解是不对的,
#ifdef global_variables_here
#undef extern
#define extern
#endif
应该这样理解:
如果定义了global_variables_here
不管extern是否定义过,都取消他之前的定义
重新定义extern
这种做法的目的在于防止extern重定义,比如你在另外一个文件中定义过了extern的话,你不做#undef的操作,直接在现在这个文件中#define extern是错误的做法,因为编译器不知道该用哪个宏定义。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯