努力进行嵌套 C 结构的部分初始化 - 在“->”标记之前应使用“=”

Struggling with partial initialization of nested C struct - expected '=' before '->' token

我显然遗漏了一些重要的东西...

我有以下定义,想对嵌套结构进行部分初始化,但是 不断收到陈述错误。

我想寻求帮助,如何以正确的方式编写这个部分初始化...

struct cb_data {
    void (*filter_match)(struct bt_scan_device_info *device_info,
                 struct bt_scan_filter_match *filter_match,
                 bool connectable);

    ...

};

struct bt_scan_cb {
    const struct cb_data *cb_addr;
    sys_snode_t node;
};



static void scan_filter_match(
    struct bt_scan_device_info *device_info, struct bt_scan_filter_match *filter_match, bool connectable) {
  char addr[BT_ADDR_LE_STR_LEN];

  bt_addr_le_to_str(device_info->addr, addr, sizeof(addr));
}

static struct bt_scan_cb scan_cb = {
    .cb_addr->filter_match     = scan_filter_match,
  };

提前感谢您的建议, 问候, 欺负.

您正在取消引用 scan_cb.cb_addr,然后再对其进行初始化。这是未定义的行为。在初始化 scan_cb.cb_addr 之前,考虑 scan_cb.cb_addr->filter_match 是没有意义的,所以让我们从那里开始吧。

static struct cb_data foo {
};

static struct bt_scan_cb scan_cb = {
    .cb_addr = &foo,
};

现在 scan_cb.cb_addr 指向一个有效的结构,初始化 scan_cb.cb_addr->filter_match 就变得微不足道了。

static struct cb_data foo {
    .filter_match = scan_filter_match,
};

static struct bt_scan_cb scan_cb = {
    .cb_addr = &foo,
};