Знатоки C/C++ - фигейте вместе со мной!
Sep. 30th, 2003 02:25 pmУ меня проект "достался по наследству". В нём дофигищща исходников.
Я 2 дня искал один баг пока не наткнулся на эту потрясающую функцию (что используется примерно раз в секунду или чаще)
double DB_ADOGeneral::FloatToDouble(float floatNum, int precision)
// DESCRIPTION: Converts namber of tupe float to double tupe,
// The precision value specifies the number of digits
// after the decimal point.
/////////////////////////////////////////////////////////////////
{
TCHAR* tc[40];
CString cs;
LPTSTR endptr;
double db = 0;
cs.Format(_T("%.*f"),precision,floatNum);
tc = new TCHAR[cs.GetLength()-1];
memset(tc,'\0',sizeof(tc));
lstrcpy(tc,cs);
db = _tcstod(tc,&endptr);
return db;
}
Я 2 дня искал один баг пока не наткнулся на эту потрясающую функцию (что используется примерно раз в секунду или чаще)
double DB_ADOGeneral::FloatToDouble(float floatNum, int precision)
// DESCRIPTION: Converts namber of tupe float to double tupe,
// The precision value specifies the number of digits
// after the decimal point.
/////////////////////////////////////////////////////////////////
{
TCHAR* tc[40];
CString cs;
LPTSTR endptr;
double db = 0;
cs.Format(_T("%.*f"),precision,floatNum);
tc = new TCHAR[cs.GetLength()-1];
memset(tc,'\0',sizeof(tc));
lstrcpy(tc,cs);
db = _tcstod(tc,&endptr);
return db;
}
no subject
Date: 2003-09-30 04:56 am (UTC)Да идиот он (можно сказать, что "был")
Date: 2003-09-30 05:31 am (UTC)(c) Suzane Vega
:-)
no subject
:-)
Date: 2003-09-30 05:30 am (UTC)Re: :-)
Date: 2003-09-30 06:01 am (UTC)Re: :-)
Date: 2003-09-30 06:18 am (UTC)Лучше, чем сидеть - лапу сосать и думать о былых великих днях, когда я был крут и все были передо мной сынками :-)
Re: :-)
Date: 2006-12-17 10:54 pm (UTC)no subject
Date: 2003-09-30 07:16 am (UTC)no subject
Date: 2003-09-30 07:22 am (UTC)А я просто поставил inline, return double(floatNum) ибо точность там вообще не используется ;-)))
no subject
Date: 2003-09-30 11:49 am (UTC)no subject
Date: 2003-09-30 11:46 am (UTC)no subject
Date: 2003-10-30 04:30 am (UTC)Вот только это не могло использоваться раз в секунду. Это вообще не компилируется: tc - lvalue.
no subject
Date: 2003-10-30 04:32 am (UTC)no subject
Date: 2003-10-30 05:26 am (UTC)Было установлено куча каких то настроек компилятора, о которых я даже и не подозревал! Я до сих пор в непонятках ПОЧЕМУ это вообще компилировалось и работало. Могу прислать исходники из Source Safe, если не веришь. Там много подобных перлов.
Так что: на свете многое есть друг Горацио, что человеку знать не положено :-|.
*.h: #define A(X) static inline void A{X}
Date: 2003-10-30 08:31 am (UTC)#define LOWORD(X) (X&FFh)
#define HIWORD(X) (X shr 8)
byte loword(real* x) {return *(byte*)(void*)x;}
byte hiword(real* x) {return *++((byte*)(void*)x);}
пришлось использовать
mov ax, fp
return al;
return ah;
(как оказалось, у компиллятора нельзя отключить оптимизатор)
Re: *.h: #define A(X) static inline void A{X}
Date: 2003-10-30 08:57 am (UTC)И я лет 7 назад на это напоролся :-).
Пока в ассемблер в дебаге не залез - дня 2 бошку ломал над подобным!
no subject
Date: 2003-10-30 08:34 am (UTC)редкостный бред. я хуже видел лишь однажды, но там
совершенно шизофреничный кернельный программер наворотил, помимо прочего, несколько уровней макросов
вот, Вам повезло, - макросов нет ))
no subject
Date: 2003-10-30 08:53 am (UTC)Иногда помогает :-)
Но что точно - нетути у мене макросов в этом проекте :-) Тот, кто ЭТО писал видимо просто не знал что это такое :-)))
Это не програмист
Date: 2003-10-30 09:59 am (UTC)пора вставлять пункты про философоф
Date: 2003-10-31 09:52 am (UTC)А так все ошибки распостранённые и даже не как ошибки. Такое часто бывает, когда писатели сменяются. Например char*[] могло быть зарезервировано для кеша или многозадачности, таблицы вообще. А таблицы трогать опасно.
Re: пора вставлять пункты про философоф
Date: 2003-10-31 09:57 am (UTC)Там ни таблиц ни кэша :-)
Там просто "программер" после 3х месячных курсов, которому дали очень ответственную работу и не проверяли его!