4

我正在阅读 Libevent2.0 的源代码,我发现下面有一些我无法理解的代码。为什么我们可以访问成员“ev_ncalls”而不访问“_ev”和“ev_signal”?我编译了一些无法通过 gcc 的代码。这是代码:

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;
4

1 回答 1

4

这是因为event-internal.h有类似的东西:

#define ev_ncalls   _ev.ev_signal.ev_ncalls
#define ev_pncalls  _ev.ev_signal.ev_pncalls

所以当你说ev->ev_ncalls编译器看到ev->_ev.ev_signal.ev_ncalls.

于 2012-09-11T05:05:59.353 回答