关于宏定义的一个问题

浩仔 2020-02-05 05:19:46
最近在看redis源码,看到了这么一句话

#define memrev64ifbe(p)

不明白什么意思
这是那个头文件的源码

#ifndef __ENDIANCONV_H
#define __ENDIANCONV_H

#include "config.h"
#include <stdint.h>

void memrev16(void *p);
void memrev32(void *p);
void memrev64(void *p);
uint16_t intrev16(uint16_t v);
uint32_t intrev32(uint32_t v);
uint64_t intrev64(uint64_t v);

/* variants of the function doing the actual convertion only if the target
* host is big endian */
#if (BYTE_ORDER == LITTLE_ENDIAN)
#define memrev16ifbe(p)
#define memrev32ifbe(p)
#define memrev64ifbe(p)
#define intrev16ifbe(v) (v)
#define intrev32ifbe(v) (v)
#define intrev64ifbe(v) (v)
#else
#define memrev16ifbe(p) memrev16(p)
#define memrev32ifbe(p) memrev32(p)
#define memrev64ifbe(p) memrev64(p)
#define intrev16ifbe(v) intrev16(v)
#define intrev32ifbe(v) intrev32(v)
#define intrev64ifbe(v) intrev64(v)
#endif

#endif
...全文
181 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
浩仔 2020-02-05
  • 打赏
  • 举报
回复
明白了明白了
qybao 2020-02-05
  • 打赏
  • 举报
回复
上面误字,就有->就
qybao 2020-02-05
  • 打赏
  • 举报
回复
引用 2 楼 浩仔 的回复:
?
那写这句话是干什么的

就是BYTE_ORDER == LITTLE_ENDIAN 的时候,所有代码里有memrev16ifbe(p)的地方都会用空格覆盖掉
比如有 某行代码有函数调用 memrev16ifbe(p); 在BYTE_ORDER == LITTLE_ENDIAN 的时候该行代码就变成空白,也就是相当于源代码没有这一行,所以BYTE_ORDER == LITTLE_ENDIAN的时候就会有 memrev16ifbe(p) 处理
lin5161678 2020-02-05
  • 打赏
  • 举报
回复
引用 2 楼 浩仔 的回复:
?
那写这句话是干什么的
#if (BYTE_ORDER == LITTLE_ENDIAN)
#define memrev16ifbe(p)
#define memrev32ifbe(p)
#define memrev64ifbe(p)
#define intrev16ifbe(v) (v)
#define intrev32ifbe(v) (v)
#define intrev64ifbe(v) (v)
#else
#define memrev16ifbe(p) memrev16(p)
#define memrev32ifbe(p) memrev32(p)
#define memrev64ifbe(p) memrev64(p)
#define intrev16ifbe(v) intrev16(v)
#define intrev32ifbe(v) intrev32(v)
#define intrev64ifbe(v) intrev64(v)
#endif

BYTE_ORDER == LITTLE_ENDIAN 的时候没用
不等于的时候是 intrev64(v)

浩仔 2020-02-05
  • 打赏
  • 举报
回复
? 那写这句话是干什么的
lin5161678 2020-02-05
  • 打赏
  • 举报
回复
意思就是空白

#define memrev16ifbe(p) 就是空白的
代码里面调用这个宏的那行代码 空行

70,021

社区成员

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

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