结构类型本身可以传递给函数作为c中的参数吗?
can struct type itself be passed to function as parameter in c?
在研究wayland协议的过程中,发现函数的代码以struct类型为参数。
#include <wayland-server.h>
static struct wl_compositor_interface compositor_interface =
{&compositor_create_surface, &compositor_create_region};
int main() {
wl_global_create (display, &wl_compositor_interface, 3, NULL,
&compositor_bind);
}
wl_global_create 的签名是
struct wl_global* wl_global_create (struct wl_display *display,
const struct wl_interface *interface,
int version,
void *data,
wl_global_bind_func_t bind)
wl_compositor_interface是结构类型,不是变量名。但是 wl_global_create() 将结构类型作为函数参数。
有人可以解释这是如何工作的吗?
我阅读的源代码在这里。 https://github.com/eyelash/tutorials/blob/master/wayland-compositor/wayland-compositor.c
我浏览了源码,有一个struct wl_compositor_interface
和一个变量wl_compositor_interface
。
包含的 wayland_server.h
在底部包含 wayland-server-protocol.h
。不幸的是,这在网上不可用,而是在构建时生成的。您可以通过以下方式获得它:
$ git clone git://anongit.freedesktop.org/wayland/wayland
$ cd wayland
$ mkdir prefix
$ ./autogen.sh --prefix=$(pwd)/prefix --disable-documentation
$ make protocol/wayland-server-protocol.h
在此文件中,它具有(有些令人困惑的)定义:
extern const struct wl_interface wl_compositor_interface; // On line 195
...
struct wl_compositor_interface { // Starting on line 986
void (*create_surface)(struct wl_client *client,
struct wl_resource *resource,
uint32_t id);
void (*create_region)(struct wl_client *client,
struct wl_resource *resource,
uint32_t id);
};
第一次被引用的是struct
,第二次是变量。
在研究wayland协议的过程中,发现函数的代码以struct类型为参数。
#include <wayland-server.h>
static struct wl_compositor_interface compositor_interface =
{&compositor_create_surface, &compositor_create_region};
int main() {
wl_global_create (display, &wl_compositor_interface, 3, NULL,
&compositor_bind);
}
wl_global_create 的签名是
struct wl_global* wl_global_create (struct wl_display *display,
const struct wl_interface *interface,
int version,
void *data,
wl_global_bind_func_t bind)
wl_compositor_interface是结构类型,不是变量名。但是 wl_global_create() 将结构类型作为函数参数。 有人可以解释这是如何工作的吗?
我阅读的源代码在这里。 https://github.com/eyelash/tutorials/blob/master/wayland-compositor/wayland-compositor.c
我浏览了源码,有一个struct wl_compositor_interface
和一个变量wl_compositor_interface
。
包含的 wayland_server.h
在底部包含 wayland-server-protocol.h
。不幸的是,这在网上不可用,而是在构建时生成的。您可以通过以下方式获得它:
$ git clone git://anongit.freedesktop.org/wayland/wayland
$ cd wayland
$ mkdir prefix
$ ./autogen.sh --prefix=$(pwd)/prefix --disable-documentation
$ make protocol/wayland-server-protocol.h
在此文件中,它具有(有些令人困惑的)定义:
extern const struct wl_interface wl_compositor_interface; // On line 195
...
struct wl_compositor_interface { // Starting on line 986
void (*create_surface)(struct wl_client *client,
struct wl_resource *resource,
uint32_t id);
void (*create_region)(struct wl_client *client,
struct wl_resource *resource,
uint32_t id);
};
第一次被引用的是struct
,第二次是变量。