我最近在我的一个使用 GLib 的应用程序中遇到了以下警告:
warning: ISO C prohibits argument conversion to union type [-Wpedantic]
note: in definition of macro '_G_DEFINE_BOXED_TYPE_BEGIN'
2147 | _g_register_boxed (g_intern_static_string (#TypeName), copy_func, free_func);
我通常编译,-wpedantic
这是我第一次收到无法追溯到我的代码的警告,但似乎是由_G_DEFINE_BOXED_TYPE_BEGIN
-macro 的内部引起的。G_DEFINE_BOXED_TYPE
每当与专用的免费或复制功能一起使用时,似乎都会出现警告。
示例应用程序可能如下所示:
/* boxed_warning.c
* Produces warning, when compiled with:
* $ cc `pkg-config --cflags glib-2.0` -Wextra -Wpedantic -Wall -std=gnu11 -O0 -g -o 'boxed_warning.c.o' -c boxed_warning.c
*/
#include <glib.h>
#include <gio/gio.h>
struct _FooBoxed { gdouble x; };
typedef struct _FooBoxed FooBoxed;
static FooBoxed *
foo_boxed_copy (const FooBoxed *boxed)
{
FooBoxed *result = g_new (FooBoxed, 1);
*result = *boxed;
return result;
}
G_DEFINE_BOXED_TYPE (FooBoxed, foo_boxed, (GBoxedCopyFunc) foo_boxed_copy, (GBoxedFreeFunc) g_free)
我使用的是 glib 2.62.4,但即使使用来自 git.gnome.org 的最新版本进行编译,我也可以重现该警告。
有没有其他人在使用 GLib2.0 时遇到过这个警告并找到了解决方法?还是警告确实与我的代码对上述宏的错误使用有关?