вывести значение NaN - PullRequest
       12

вывести значение NaN

3 голосов
/ 30 октября 2011

Как заставить работать следующий код? Я хочу напечатать «не определено» вместо -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;
}

1 Ответ

3 голосов
/ 30 октября 2011

Вы не можете использовать args таким образом, вы должны использовать va_arg, чтобы получить фактический аргумент.

if(_isnan(va_arg(args,double)))

сделает трюк, но это тебе мало поможет. Вы не можете вывести тип из аргументов. Тип, который вы указываете на va_arg, должен быть фактическим типом переданного объекта.

И с этим ваш vprintf вызов также не будет работать, вам нужно "перезапустить" va_list, поскольку va_arg уже "потребил" один аргумент.

...