У меня есть код, который выглядит примерно так, где адрес является SOCKADDR *:указатель разыменование делает перерыв строгих правил сглаживания с использованием Беркли сокетов
struct sockaddr_in *sin = (struct sockaddr_in *) addr;
const char *IP=inet_ntoa(sin -> sin_addr);
Я считаю, что это очень типичный код для использования Беркли Розетки.
Однако, когда я компилирую это, я получаю следующее предупреждение:
dereferencing pointer 'sin' does break strict anti-aliasing rules
поиска в Интернете, я нахожу некоторое обсуждение о том, что путь я делаю вещи, это довольно типично, но это Предупреждение компилятора также довольно реально и не очень хорошо.
Каков правильный способ повторить этот код, чтобы исправить это предупреждение, а не просто отключить его?
Sockets не являются частью реализации компилятора, но часть операционной системы. –
Где у программиста есть «#include», либо что-то файл заголовка.h является частью реализации C или C++, иначе программисту повезло, что все работает так же хорошо, как и они, и программисту приходится решать его самостоятельно. –
Это справедливо только для #include файлов, которые являются частью языка, например. stdlib.h. Файлы Socket include являются частью SDK сокетов, а не компилятором. – EJP