English 中文(简体)
如何解决警告:被忽略的点名将打破严格的规则
原标题:How to resolve warning: dereferencing type-punned pointer will break strict-aliasing rules
  • 时间:2011-11-22 16:40:38
  •  标签:
  • c
    #define HTON_I32(x) htonl(x)
inline float  __HTON_F32(float  x)
{
    int i = HTON_I32(*((int *)(&x)));
    return (*((float *)(&i)));
}

How to resolve warning dereferencing type-punned pointer will break strict-aliasing rules in the above code

问题回答

消除打字机,用在 alia子面前很脆弱的东西取而代之:

#include <string.h>

inline float __HTON_F32(float x) {
    int i;
    memcpy(&i, &x, sizeof x);
    i = HTON_I32(i);
    memcpy(&x, &i, sizeof x);
    return x;
}

合理优化汇编者将降低<代码>memcpy的电话,并产生相当于(有时更好)的代码,使之符合您从打字中获得的数值。

你看到的另一个共同解决办法是工会。 所有这些解决办法都假定,<代码>(int)=(float)/代码。 您不妨补充这方面的主张。

(C99:TC3明确提到这确实合法):

#include <stdint.h>

inline float __HTON_F32(float x) {
    union { float as_float; int32_t as_int; } value = { x };
    value.as_int = HTON_I32(value.as_int);
    return value.as_float;
}




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签