4

Libevent2.0 のソース コードを読んでいると、理解できないコードがいくつかあります。「_ev」と「ev_signal」にアクセスせずにメンバー「ev_ncalls」にアクセスできるのはなぜですか? そして、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 に答える