【发布时间】:2012-11-02 04:35:13
【问题描述】:
我有一个发出以下警告的函数(见下文):
‘va_start’的第二个参数不是最后命名的参数
这是什么意思以及如何删除它?
函数如下:
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;
}
}
【问题讨论】:
-
这就是它所说的意思。您需要在省略号之前为其提供最后一个参数。您可能会发现这有助于真正解释原因:codeproject.com/Articles/4181/Variable-Argument-Functions