gpt4 book ai didi

c - 如何解决警告 : dereferencing type-punned pointer will break strict-aliasing rules

转载 作者:太空狗 更新时间:2023-10-29 14:55:24 31 4
gpt4 key购买 nike

    #define HTON_I32(x) htonl(x)
inline float __HTON_F32(float x)
{
int i = HTON_I32(*((int *)(&x)));
return (*((float *)(&i)));
}

如何解决警告 解引用类型双关指针将破坏严格的别名规则在上面的代码中

最佳答案

消除类型双关,并用在别名面前不脆弱的东西取而代之:

#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 调用,并生成与从类型双关中获得的代码等效(有时更好)的代码。

您将看到的另一种常见解决方案涉及 union 。所有这些解决方案都假定 sizeof(int) == sizeof(float)。您可能想为此效果添加一个断言。

关于c - 如何解决警告 : dereferencing type-punned pointer will break strict-aliasing rules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230356/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com