我有一个函数(见下文)发出以下警告:
second parameter of ‘va_start’ not last named argument
这是什么意思以及如何删除它?
函数如下:
static int ui_show_warning(GtkWindow *parent, const gchar *fmt, size_t size, ...)
{
GtkWidget *dialog = NULL;
va_list args = NULL;
int count = -1;
char *msg = NULL;
if((msg = malloc(size + 1)) == NULL)
return -12;
va_start(args, fmt);
if((count = snprintf(msg, size, fmt, args)) < 0)
goto outer;
dialog = gtk_message_dialog_new(parent,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK,
"%s", msg);
(void) gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
outer: {
if(args != NULL)
va_end(args);
if(msg != NULL)
free(msg);
return count;
}
}
最佳答案
您需要使用size
而不是fmt
:
va_start(args, size);
它是 size
,而不是 fmt
,它是最后一个具有显式名称的参数(与没有名称的 vararg 参数相反)。您需要将最后一个命名参数传递给 va_start
,以便它找出内存中可变参数开始的地址。
关于c - 如何删除此警告 : second parameter of ‘va_start’ not last named argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13189365/