ХЕЛП!!!
Допустим у меня есть функция
void routine( ROUTINE_ID in_routine_id, ...)
{
BEGIN_ARG_SELECTION();
ARG( int, some_int );
ARG( float, some_float );
ARG( char, some_char );
cout<<"some_int: "<<some_int<< " some_float: "<<some_float<<" some_char:"<<some_char<<endl;
//Отсылаем полученные параметры некоторой функции...
some_func( some_int, some_float, some_char );
END_ARG_SELECTION();
}
Проблема возникает, когда я передаю ей float
(т.е. второй параметр)
//...
routine( SOME_ID, 999, 555.0f, 251 )
//...
..int выводится нормально, а вместо float и char — какая-то белиберда.
Но, если преобразовывать float в DWORD и обратно, то все работает:
inline float to_float( DWORD in_dword )
{return (*(float*)&in_dword);}
inline DWORD to_dword( float in_float )
{return (*(DWORD*)&in_float);}
//....
void routine( ROUTINE_ID in_routine_id, ...)
{
BEGIN_ARG_SELECTION();
ARG( int, some_int );
ARG( DWORD, some_float );
ARG( char, some_char );
cout<<"some_int: "<<some_int<< " some_float: "<<some_float<<to_float( some_float )<<" some_char:"<<some_char<<endl;
//Отсылаем полученные параметры некоторой функции...
some_func( some_int, to_float( some_float ), some_char );
END_ARG_SELECTION();
}
//....
routine( SOME_ID, 999, to_dword( 555.0f ), 251 );
Вопрос:ПОЧЕМУ???