[英]address of a va_list variable is not allowed? Error: assignment from incompatible pointer type?
在 Linux 上復制它的代碼如下:
GCC 4.8.5 20150623 (Red Hat 4.8.5-44) 不,我不能改變這個,它在 CentOS7 上,它需要留在那里)
#include <stdarg.h>
struct foo {
va_list *pAP;
const char *fmt;
};
void format_output( struct foo *pFoo );
void my_vprintf( const char *fmt, va_list ap )
{
struct foo x;
x.fmt = fmt;
// why is this not allowed?
x.pAP = ≈ // <- ERROR/WARNING: assignment from incompatible pointer type
format_output( &x );
}
void my_printf( const char *fmt, ... )
{
va_list ap;
va_start( ap, fmt );
my_vprintf( fmt, ap );
}
這是不允許的,因為在您的實現中, va_list
恰好是數組類型。 這是標准允許的,但不是必需的。 (這有點煩人。)
當您將數組類型用作 function 參數時,它“衰減”為指針類型(指向數組中第一個元素的指針),這與指向數組類型的指針(這是pAP
成員struct foo
是)。
一個簡單的解決方法是在my_printf
中創建struct foo
而不是在my_vprintf
中創建它。 另一種可能性是使struct foo
成員成為va_list
而不是指向va_list
的指針,並使用va_copy
而不是賦值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.