Mam kodu, który wygląda mniej więcej tak, gdzie addr jest sockaddr *:dereferencji wskaźnik łamie surowe przepisy anty-aliasingu za pomocą gniazd Berkeley
struct sockaddr_in *sin = (struct sockaddr_in *) addr;
const char *IP=inet_ntoa(sin -> sin_addr);
Uważam, że to bardzo typowy kod za korzystanie Berkeley gniazda.
Jednak, kiedy mogę skompilować to, Dostaję następujące ostrzeżenie:
dereferencing pointer 'sin' does break strict anti-aliasing rules
szukają w internecie, znajdę jakąś dyskusję o tym, że droga Robię rzeczy jest dość typowe, ale ten Ostrzeżenie dla kompilatora również jest całkiem realne i nie jest dobre.
Jaki jest właściwy sposób ponownego napisania tego kodu, aby naprawić ostrzeżenie, a nie tylko go wyciszyć?
Gniazda nie są częścią implementacji kompilatora, ale część systemu operacyjnego. –
Gdzie programista ma "#include", albo ten plik nagłówkowy coś.h jest częścią implementacji C lub C++, albo programista ma szczęście, że rzeczy działają tak dobrze jak one, a programista musi sam je rozwiązać. –
Dotyczy to tylko plików #include należących do języka, np. stdlib.h. Pliki dołączane do gniazd są częścią zestawu gniazd SDK, a nie kompilatora. – EJP