厳密なエイリアシング警告を取り除く最も簡単な方法はどれですか?c - 厳密なエイリアシング警告の処理方法
コードは:
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)を認識するために1バイトを受け取る読み取りがあります。
warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
*((uint16_t *) &msg[1]) = bytesToRead;
^
:
警告を取り除くためにどの素早く、簡単な方法はありますか?
エンディアンはどうですか?移植性のあるコードが必要ないのは確かですか?ビットシフトの使用を検討してください。 – Lundin
@Lundinもし私が間違っているなら私を訂正しますが、私は本当にエンディアンを気にしますか?私はちょうどそれをuint16_tとして送信し、後でuint16_tの値として受け取りたい。値が内部的にどのように格納されるかは重要ですか? – Messut
送信側コンピュータにはエンディアンがあり、実際のプロトコルにはエンディアンがあり、受信側にはエンディアンが設定されます。 3つのうちの1つが異なるエンディアンを使用する場合は、気にする必要があります。 – Lundin