我如何使以下代码有效?我想打印“未定义”而不是-1。#IND00
int myprint(const char* format, ...)
{
va_list args;
va_start (args, format);
int ret;
if(_isnan(static_cast<float>(*args)))
ret = printf ("non defined");
else
ret = vprintf (format, args);
fflush(stdout);
va_end (args);
return ret;
}
int main()
{
myprint("%f", sqrt(-1.0));
return 0;
}
答案 0 :(得分:3)
你不能像这样使用args
,你必须使用va_arg
来获得实际的论点。
if(_isnan(va_arg(args,double)))
可以做到这一点,但这对你没有多大帮助。您无法从参数中推断出类型。您向va_arg
指示的类型必须是传入的对象的实际类型。
由此,您的vprintf
调用也无效,您需要“重新启动”va_list,因为va_arg
已经“消耗”了一个参数。