C++中嵌套C结构的offsetof()

Víc*_*dez 1 c c++ sockets struct offsetof

我正在尝试在C++(Linux)中为我的一个套接字添加套接字过滤器.在套接字过滤器中,我需要获取struct fork_proc_event的偏移量,它嵌套在另一个结构中.定义看起来像这样(cn_proc.h):

struct proc_event {
    ...
    union {
        ...
        struct fork_proc_event {
            __kernel_pid_t parent_pid;
            ...
        } fork;
        ...
    } event_data;
    ...
};

在CI中会这样做:

int off = offsetof(struct fork_proc_event, parent_pid);

但是我正在用C++开发.如果我尝试这样做:

int off = offsetof(proc_event::fork_proc_event, parent_pid);

我收到以下错误:

error: expected type-specifier
error: expected `,'
error: expected `)' before ',' token

offsetof()行应该如何?

asv*_*kau 5

考虑如何实现offsetof宏可能有助于思考.这是一个例子:

#define offsetof(TYPE, MEMBER) \
    ((uintptr_t)&(((TYPE*)0)->MEMBER))
Run Code Online (Sandbox Code Playgroud)

换句话说,使用0指向您感兴趣的类型的指针,并简单地获取struct字段的地址...

所以,如果你想要parent_pid相对的偏移量fork(这是我最初解析你的问题的方式):

((char*)&((struct proc_event*)0)->event_data.fork.parent_pid) - ((char*)&((struct proc_event*)0)->event_data.fork)
Run Code Online (Sandbox Code Playgroud)

在第二次阅读时,听起来你可能只想要parent_pid相对于开头的偏移量struct proc_event.调整上面的例子:

((uintptr_t)&((struct proc_event*)0)->event_data.fork.parent_pid)
Run Code Online (Sandbox Code Playgroud)