C 传递_VA_参数时,第一个参数是错误的__
我想把参数传递给一个函数。出于某种原因,第一个参数总是错误的(似乎是地址): 例如,尝试打印同一变量时: “A=0x20005524 A=0x00000007” 有人知道为什么吗?C 传递_VA_参数时,第一个参数是错误的__,c,macros,variadic-functions,C,Macros,Variadic Functions,我想把参数传递给一个函数。出于某种原因,第一个参数总是错误的(似乎是地址): 例如,尝试打印同一变量时: “A=0x20005524 A=0x00000007” 有人知道为什么吗? 谢谢您的参数顺序有误。传递给va_start()的参数必须在之前,因为它用于计算额外参数的起始位置 所以你的函数应该是这样的 void PrintfError(const char* function, const char* format, ...) { va_list args; va_start
谢谢您的参数顺序有误。传递给
va_start()
的参数必须在之前,因为它用于计算额外参数的起始位置
所以你的函数应该是这样的
void PrintfError(const char* function, const char* format, ...)
{
va_list args;
va_start(args, format);
您的参数顺序错误。传递给va_start()
的参数必须在之前,因为它用于计算额外参数的起始位置
所以你的函数应该是这样的
void PrintfError(const char* function, const char* format, ...)
{
va_list args;
va_start(args, format);
这里有两个问题
首先,va_start
期望当前函数的最后一个命名参数作为其第二个参数。在这种情况下,这将是函数
第二个问题是将va_列表
传递到printf
中。您应该改为调用vprintf
void PrintfError(const char* format, const char* function, ...)
{
va_list args;
va_start(args, function); // pass "function" instead of "format"
printf("%s(): ", function);
vprintf(format, args); // call vprintf
va_end(args);
}
这里有两个问题
首先,va_start
期望当前函数的最后一个命名参数作为其第二个参数。在这种情况下,这将是函数
第二个问题是将va_列表
传递到printf
中。您应该改为调用vprintf
void PrintfError(const char* format, const char* function, ...)
{
va_list args;
va_start(args, function); // pass "function" instead of "format"
printf("%s(): ", function);
vprintf(format, args); // call vprintf
va_end(args);
}
发件人:
[……]
描述
va_start()
[……]
参数last
是变量参数列表前最后一个参数的名称,即调用函数知道其类型的最后一个参数
如此给定
void PrintfError(const char* format, const char* function, ...)
换衣服
va_start(args, format);
将来
还有这个
printf(format, args);
(可能是打字错误)应该是
vprintf(format, args);
这与你的问题无关
#define PRINTF_ERROR(format, ...) {\
PrintfError(format, __FUNCTION__, ##__VA_ARGS__);\
}
卷曲的背带只是安全的一半
最好
#define PRINTF_ERROR(format, ...) do {\
PrintfError(format, __FUNCTION__, __VA_ARGS__);\
} while (0)
也不需要来自以下地址的#
:
[……]
描述
va_start()
[……]
参数last
是变量参数列表前最后一个参数的名称,即调用函数知道其类型的最后一个参数
如此给定
void PrintfError(const char* format, const char* function, ...)
换衣服
va_start(args, format);
将来
还有这个
printf(format, args);
(可能是打字错误)应该是
vprintf(format, args);
这与你的问题无关
#define PRINTF_ERROR(format, ...) {\
PrintfError(format, __FUNCTION__, ##__VA_ARGS__);\
}
卷曲的背带只是安全的一半
最好
#define PRINTF_ERROR(format, ...) do {\
PrintfError(format, __FUNCTION__, __VA_ARGS__);\
} while (0)
也不需要##
printf
不需要va\u列表
——你可能是说vprintf
printf
不需要va\u列表
——你可能是说vprintf
。