gpt4 book ai didi

c - 如何处理严格的别名警告

转载 作者:行者123 更新时间:2023-12-05 01:27:36 26 4
gpt4 key购买 nike

摆脱严格别名警告的最简单方法是什么?

代码是:

uint8_t msg[3];
int retval;

msg[0] = (uint8_t) INT_READ_EVENT;
*((uint16_t *) &msg[1]) = bytesToRead;

retval = write(intPipe[1], msg, sizeof(msg));

bytesToRead 作为 uint16_t 值传递。

在另一端,有一个读取接收单个字节以在处理剩余数据之前识别事件类型(在本例中为 INT_READ_EVENT)。

是否有任何快速、简单的方法来消除警告:

warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
*((uint16_t *) &msg[1]) = bytesToRead;
^

?

最佳答案

像这样,因为它强制您决定 16 位值应表示为的字节顺序:

// Little-endian.
msg[1] = bytesToRead & 0xff;
msg[2] = (bytesToRead >> 8) & 0xff;

对于大端,将右侧的顺序颠倒。

关于c - 如何处理严格的别名警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145981/

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