Предупреждение Pedanti c при использовании G_DEFINE_BOXED_TYPE - PullRequest
1 голос
/ 08 февраля 2020

Недавно я наткнулся на следующее предупреждение в одном из моих приложений, которое использует 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 и нашел обходной путь? Или предупреждение действительно связано с неправильным использованием упомянутого макроса моим кодом?

...