Обнаружил, что отладочная и релизная версия одной программы (откомпилирована в VS2015) возвращают различающиеся текстовые представления double 0.0.
Debug : 0.0000000000000000 (18 символов)
Release : 0.000000000000000 (17 символов)
Оказалось, что проблема в vsnprintf.
Накатал небольшую демку, идентичную коду той программы, и собрал её в VS2015, VS2017, VS2019.
| Вот |
| ////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdarg.h>
#include <iostream>
//------------------------------------------------------------------------
int SNPRINTF(char* buffer, size_t count, const char* format...)
{
va_list args;
va_start(args, format);
const int rc = vsnprintf(buffer, count, format, args);
buffer[count - 1] = 0;
va_end(args);
return rc;
}//snprintf
//------------------------------------------------------------------------
int main()
{
int precision=16;
double d=0.0;
int width=23;
char temp[50];
const char num_format[]="%- #*.*g";
int rc=SNPRINTF(temp,sizeof(temp),num_format,width,precision,d);
using namespace std;
cout<<"["<<rc<<"]\""<<temp<<"\""<<endl;
return 0;
}//main
////////////////////////////////////////////////////////////////////////////////
|
| |
Проблема(?) наблюдается во всех трех случаях.
| Результаты запуска |
| >call bin\vs2015-Win32-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000 "
>call bin\vs2015-Win32-Release\ConsoleApplication1.exe
[23]" 0.000000000000000 "
>call bin\vs2015-x64-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000 "
>call bin\vs2015-x64-Release\ConsoleApplication1.exe
[23]" 0.000000000000000 "
>call bin\vs2017-Win32-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000 "
>call bin\vs2017-Win32-Release\ConsoleApplication1.exe
[23]" 0.000000000000000 "
>call bin\vs2017-x64-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000 "
>call bin\vs2017-x64-Release\ConsoleApplication1.exe
[23]" 0.000000000000000 "
>call bin\vs2019-Win32-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000 "
>call bin\vs2019-Win32-Release\ConsoleApplication1.exe
[23]" 0.000000000000000 "
>call bin\vs2019-x64-Debug\ConsoleApplication1.exe
[23]" 0.0000000000000000 "
>call bin\vs2019-x64-Release\ConsoleApplication1.exe
[23]" 0.000000000000000 "
|
| |
Что за ботва, Пендальф?
Это ошибка в реализации vsnprintf или я чего не догоняю
-- Пользователи не приняли программу. Всех пришлось уничтожить. --