엄격한 앨리어싱 경고를 제거하는 가장 쉬운 방법은 무엇입니까?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)을 인식하는 단일 바이트를 수신하는 읽기가 있습니다.
warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
*((uint16_t *) &msg[1]) = bytesToRead;
^
:
경고를 제거 할 수있는 빠르고 간단한 방법이 있습니까?
endianess는 어떻게됩니까? 이식 가능한 코드를 원하지 않습니까? 비트 시프트 사용을 고려하십시오. – Lundin
@Lundin 내가 틀렸다면 정정 해 주겠다.하지만 나는 엔디안에 대해 정말로 신경 쓸 것인가? 그냥 uint16_t로 보내고 나중에 uint16_t 값으로 받길 원합니다. 값이 내부적으로 저장되는 방법이 중요합니까? – Messut
보낸 사람 컴퓨터는 endianess를 가지며 실제 프로토콜은 endianess를 가지며 수신기는 endianess를가집니다. 세 가지 중 하나가 다른 엔디안을 사용하면 걱정해야합니다. – Lundin