我听着GtkComboBox
的“变化”信号。我清空并填充GtkComboBoxText
,这是GtkComboBox
的简单变体。我正在尝试使用宏g_signal_handlers_block_by_func(instance, func, data)
,以便在清空并重新填充该框时不会将“已更改”的信号发送到我的回调函数中。
在将函数作为函数传递时出错:错误:ISO C禁止在函数指针和“ void *”之间传递参数“ g_signal_handlers_block_matched”的参数6 [-Werror = pedantic]
之所以发生这种情况,是因为func被强制转换为{{1}的typedef到gpointer
中的(void*))
。据我所知,将函数指针转换为数据指针是非法的。
示例:
g_signal_handlers_block_matched
也尝试了不使用G_CALLBACK的情况,但这没有什么不同。问题是一样的。
我应该如何使用static void my_callback(GtkComboBox *box, GtkComboBox *other_box)
{
// Some code here
}
g_signal_connect(combo_box, "changed", G_CALLBACK(my_callback), other_box);
// To temporary block changed signals for reaching other_box:
g_signal_handlers_block_by_func(combo_box, G_CALLBACK(my_callback), other_box);
?
答案 0 :(得分:1)
GObject和GLib要求在将函数指针转换为void*
时反之亦然。”
GLib严重依赖于将函数指针转换为
void*
并再次无损返回的能力。任何不支持此功能的平台或编译器都不能用于编译GLib或使用GLib的代码。这排除了将-pedantic
GCC标志与GLib一起使用。