我如何使下面的代码工作? 我想打印“非定义”而不是-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; }
你不能使用这样的args
,你必须使用va_arg
来获得一个实际的参数。
if(_isnan(va_arg(args,double)))
会做的伎俩,但这不会帮助你很多。 你不能从参数中推断出类型。 您向va_arg
指出的类型必须是传入的对象的实际类型。
因此,你的vprintf
调用也不行,你需要“重新启动”va_list,因为va_arg
已经“消耗”了一个参数。