addr が sockaddr* である、次のようなコードがあります。
struct sockaddr_in *sin = (struct sockaddr_in *) addr;
const char *IP=inet_ntoa(sin -> sin_addr);
これは、Berkeley ソケットを使用するための非常に典型的なコードだと思います。
ただし、これをコンパイルすると、次の警告が表示されます。
dereferencing pointer 'sin' does break strict anti-aliasing rules
オンラインで検索すると、私のやり方がかなり典型的であるという事実についての議論がいくつか見つかりますが、このコンパイラの警告もかなり現実的であり、良いことではありません。
警告を黙らせるだけでなく、警告を修正するためにこのコードをやり直す適切な方法は何ですか?