关于获取一个union的内部字段

蓝皮鼠_93822
  • 2.2k

有如下一段代码,为何在外部可以访问ev_ncalls而不需要经过_ev和ev_signal两层封装呢?
event的结构如下

struct event {
	union {
		/* used for io events */
		struct {
			TAILQ_ENTRY(event) ev_io_next;
			struct timeval ev_timeout;
		} ev_io;

		/* used by signal events */
		struct {
			TAILQ_ENTRY(event) ev_signal_next;
			short ev_ncalls;
			/* Allows deletes in callback */
			short *ev_pncalls;
		} ev_signal;
	} _ev;

};

struct event *ev;
int ncall = ev->ev_ncalls;

回复
阅读 2.9k
1 个回答

看来要自问自答了,看代码不仔细。。。
在event-internal.h里面有

#define ev_ncalls   _ev.ev_signal.ev_ncalls
#define ev_pncalls  _ev.ev_signal.ev_pncalls
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏