Большинство приложений с открытым исходным кодом с использованием GTK Я столкнулся с литым g_free как GWeakNotify. В то время как подпись g_free допускает один аргумент: g_free(), GWeakNotify typedef допускает два: GWeakNotify.Каковы предостережения о литье g_free в GWeakNotify?
Я написал простую программу для проверки литых и выглядит нормально - то есть, второй параметр «пусть через»:
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
void
callFree(GWeakNotify notify, gpointer pData, GObject *pObject)
{
notify(pData, pObject);
}
int
main(int argc, char **argv)
{
(void)argc;
(void)argv;
gpointer pData = g_malloc(32);
GObject *pNull = (GObject *)g_malloc(64); //results in a 64B leak
if (!pData)
{
fprintf(stdout, "Unable to allocate pdata\n");
}
else
{
fprintf(stdout, "pData allocated OK...freeing\n");
callFree((GWeakNotify)g_free, pData, pNull);
}
return EXIT_SUCCESS;
}
Мои вопросы: 1) То, что происходит за кулисами ? Второй аргумент просто оставлен в стеке, и g_free не заботится об этом (так как это не предполагается)?
2) Почему компилятор не жалуется на это, учитывая две подписи (1 параметр для g_free и два для GWeakNotify)?
Спасибо! P
Похоже тип (например, используемый GWeakNotify) является одним из способов обхода/обмана проверки подписи функции во время компиляции. Спасибо за информацию! – Piotrek