gpt4 book ai didi

c - 访问 union 的内部变量

转载 作者:太空狗 更新时间:2023-10-29 15:33:19 25 4
gpt4 key购买 nike

我正在阅读 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;

最佳答案

这是因为 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

关于c - 访问 union 的内部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12362963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com