How best to deal with warning c4305 when type could change?
Posted
by identitycrisisuk
on Stack Overflow
See other posts from Stack Overflow
or by identitycrisisuk
Published on 2010-05-25T11:35:57Z
Indexed on
2010/05/25
12:01 UTC
Read the original article
Hit count: 266
I'm using both Ogre and NxOgre, which both have a Real
typedef that is either float
or double
depending on a compiler flag. This has resulted in most of our compiler warnings now being:
warning C4305: 'argument' : truncation from 'double' to 'Ogre::Real'
When initialising variables with 0.1 for example. Normally I would use 0.1f but then if you change the compiler flag to double precision then you would get the reverse warning. I guess it's probably best to pick one and stick with it but I'd like to write these in a way that would work for either configuration if possible.
One fix would be to use #pragma warning (disable : 4305)
in files where it occurs, I don't know if there are any other more complex problems that can be hidden by not having this warning. I understand I would push and pop these in header files too so that they don't end up spreading across code.
Another is to create some macro based on the accuracy compiler flag like:
#if OGRE_DOUBLE_PRECISION
#define INIT_REAL(x) (x)
#else
#define INIT_REAL(x) static_cast<float>( x )
#endif
which would require changing all the variable initialisation done so far but at least it would be future proof.
Any preferences or something I haven't thought of?
© Stack Overflow or respective owner