奇怪的#define 求解?解决方案

奇怪的#define 求解?
#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



------解决方案--------------------
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。

------解决方案--------------------
包含ev_vars.h在前,包含ev_wrap.h在后

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

不会把这句替换掉的,只会把#define backend_fd ((loop)->backend_fd)之后的所有backend_fd替换掉