On Nov 26, 2011, at 4:23 PM, Kyle Sluder wrote:

> On Sat, Nov 26, 2011 at 4:17 PM, Greg Guerin <glgue...@amug.org> wrote:
>> Since you're just doing a memcpy(), you can simply cast the bits and avoid
>> the copying.  Try this:
>> 
>> float f = *((float*) &res);
>> 
>> Or try defining a C union:
>> 
>> union foo {  float f;  u_int32_t u;  };
>> union foo bar;
>> bar.u = CFSwapInt32HostToBig(value);
>> float f = bar.f;
> 
> Neither of these is legal.

Not true. The union solution is perfectly legal, and doesn't involve pointer 
aliasing.

> You are not allowed to alias a pointer to
> two different types (except pointer-to-char). See Section 6.5,
> paragraph 7 of the C99 standard:
> http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf


See footnote 82:

"If the member used to access the contents of a union object is not the same as 
the member last used to store a value in the object, the appropriate part of 
the object representation of the value is reinterpreted as an object 
representation in the new type as described in 6.2.6 (a process sometimes 
called "type punning"). This might be a trap representation."

-- 
Clark S. Cox III
clarkc...@gmail.com

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to