Tôi đã có mã mà trông giống như thế này, nơi addr là một sockaddr *:dereferencing con trỏ không phá vỡ quy tắc anti-aliasing nghiêm ngặt sử dụng socket Berkeley
struct sockaddr_in *sin = (struct sockaddr_in *) addr;
const char *IP=inet_ntoa(sin -> sin_addr);
Tôi tin rằng đây là mã rất điển hình cho việc sử dụng Berkeley ổ cắm.
Tuy nhiên, khi tôi biên dịch này, tôi nhận được cảnh báo sau đây:
dereferencing pointer 'sin' does break strict anti-aliasing rules
Tìm kiếm trên Internet, tôi tìm thấy một số cuộc thảo luận về thực tế là cách tôi đang làm mọi thứ là khá điển hình, nhưng điều này biên dịch cảnh báo cũng là khá thực tế và không phải là một điều tốt.
Cách thích hợp để làm lại mã này để khắc phục cảnh báo và không chỉ làm im lặng cảnh báo đó là gì?
Sockets không một phần của việc thực hiện biên dịch nhưng một phần của hệ điều hành. –
Trường hợp lập trình viên có "#include", thì tệp tiêu đề đó có nội dung gì đó.h là một phần của việc thực hiện C hoặc C++, hoặc người lập trình khác may mắn rằng mọi thứ hoạt động tốt như họ làm và lập trình viên phải tự giải quyết nó. –
Điều đó chỉ đúng đối với #include tệp là một phần của ngôn ngữ, ví dụ: stdlib.h. Ổ cắm bao gồm các tập tin là một phần của một ổ cắm SDK, không phải là trình biên dịch. – EJP