打印NaN值

我如何使下面的代码工作? 我想打印“非定义”而不是-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已经“消耗”了一个参数。