c-打印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已经“消耗”了一个参数.

转载注明原文:c-打印NaN值 - 代码日志