On 12/12/2011 01:48 PM, BELBACHIR Selim wrote:
> Everything seems good when I use a union instead of "*((int *)(&af))".
> 
> But I think that "*((int *)(&af))" is a valid syntax to get the
> integer representation of my floating point value (in my test case
> 0x3F800000 for 1.0f in IEEE-754). It may be target dependant but I
> think it should work on target having 32 bits float and integer (and
> IEEE754 compliance).

It's legal syntax, but it's not semantically legal.

http://www.open-std.org/jtc1/sc22/wg...docs/n1124.pdf chapter 6.5

An object shall have its stored value accessed only by an lvalue
expression that has one of the following types:

— a type compatible with the effective type of the object,

— a qualified version of a type compatible with the effective type of
the object, — a type that is the signed or unsigned type corresponding
to the effective type of the object, — a type that is the signed or
unsigned type corresponding to a qualified version of the effective
type of the object,

— an aggregate or union type that includes one of the aforementioned
types among its members (including, recursively, a member of a
subaggregate or contained union), or

— a character type.

See also labs.qt.nokia.com/2011/06/10/type-punning-and-strict-aliasing/

Andrew.

Reply via email to