1

我最近在我的一个使用 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 时遇到过这个警告并找到了解决方法?还是警告确实与我的代码对上述宏的错误使用有关?

4

0 回答 0