c'ho codice che assomigli a questo, dove addr è un sockaddr *:puntatore Dereferencing fa rompere severe norme anti-aliasing utilizzando i socket Berkeley
struct sockaddr_in *sin = (struct sockaddr_in *) addr;
const char *IP=inet_ntoa(sin -> sin_addr);
Credo che questo è un codice molto tipico per l'utilizzo di Berkeley prese.
Tuttavia, quando compilo questo, sto ottenendo il seguente avviso:
dereferencing pointer 'sin' does break strict anti-aliasing rules
Ricerca on-line, ho trovato qualche discussione il fatto che il modo in cui sto facendo le cose è abbastanza tipico, ma questo anche l'avviso del compilatore è abbastanza reale e non una buona cosa.
Qual è il modo corretto di ripetere questo codice per correggere l'avviso, e non solo per silenziarlo?
prese di corrente non sono parte di un'implementazione del compilatore, ma parte del sistema operativo. –
Se il programmatore ha "#include", o quel file di intestazione qualcosa.h fa parte di un'implementazione C o C++, oppure il programmatore è fortunato che le cose funzionino bene come fanno e il programmatore deve risolverlo da sé. –
Questo vale solo per i file #include che fanno parte della lingua, ad es. stdlib.h. I file di socket includono parte di un SDK di socket, non del compilatore. – EJP