奇怪的#define 求解?

redong 2012-06-18 11:26:43
#define ev_tstamp double
struct ev_loop
{
ev_tstamp ev_rt_now;
#define ev_rt_now ((loop)->ev_rt_now)
#define VAR(name,decl) decl;
#include "ev_vars.h"
#undef VAR
};
#include "ev_wrap.h"

/////////////////////////////////////
//相关的头文件:
//头文件"ev_vars.h"如下:
#define VARx(type,name) VAR(name, type name)
VARx(int, backend_fd)
VARx(ev_tstamp, backend_mintime) /* assumed typical timer resolution */
VAR (evpipe, int evpipe [2])
#undef VARx



//头文件"ev_wrap.h"如下:
#ifndef EV_WRAP_H
#define EV_WRAP_H
#define backend_fd ((loop)->backend_fd)
#define backend_mintime ((loop)->backend_mintime)
#define evpipe ((loop)->evpipe)
#else
#undef EV_WRAP_H
#undef backend_fd
#undef backend_mintime
#undef evpipe
#endif

...全文
143 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
redong 2012-06-18
  • 打赏
  • 举报
回复
struct ev_loop
{
double ev_rt_now;
int backend_fd;
double backend_mintime;
int evpipe [2];

};
有结果了, 不清楚, 这样与有什么好处?

#define backend_fd ((loop)->backend_fd)这个有什么好处???
redong 2012-06-18
  • 打赏
  • 举报
回复
.i里什么也没有?
赵4老师 2012-06-18
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。
yangkai7758 2012-06-18
  • 打赏
  • 举报
回复
包含ev_vars.h在前,包含ev_wrap.h在后

所以#define backend_fd ((loop)->backend_fd)在定义int backend_fd之后

不会把这句替换掉的,只会把#define backend_fd ((loop)->backend_fd)之后的所有backend_fd替换掉
redong 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

哪有int ((loop)->backend_fd)

我看到的只有把所有的backend_fd都替换成((loop)->backend_fd)罢了
[/Quote]


gcc -E -P *.c -o test.i
的结果是:

struct ev_loop
{
double ev_rt_now;
int backend_fd;
double backend_mintime;
int evpipe [2];

};
yangkai7758 2012-06-18
  • 打赏
  • 举报
回复
哪有int ((loop)->backend_fd)

我看到的只有把所有的backend_fd都替换成((loop)->backend_fd)罢了
redong 2012-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

比如在某些环境下,这个backend_fd是被封装在一个名为loop的结构体中的

而在某些环境下就是直接定义了一个int

用宏就是可以直接的切换了而不用写两套代码
[/Quote]

请问一下, 宏替换时,这样int ((loop)->backend_fd)可以正确解释, 原理是什么呢?
yangkai7758 2012-06-18
  • 打赏
  • 举报
回复
比如在某些环境下,这个backend_fd是被封装在一个名为loop的结构体中的

而在某些环境下就是直接定义了一个int

用宏就是可以直接的切换了而不用写两套代码
yangkai7758 2012-06-18
  • 打赏
  • 举报
回复
好处就在于可以切换不同的环境下的不同定义

这个在多体系支持的代码里很常见啊

70,020

社区成员

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

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