在'->'令牌之前,嵌套 C 预期'='的部分初始化正在苦苦挣扎



我在这里显然错过了一些重要的东西......

我有以下定义,并希望对嵌套结构进行部分初始化,但是 不断收到声明错误。

我恳请帮助,如何以正确的方式编写此部分初始化......

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,
};

最新更新