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