我该怎么做:
*(int *)CMSG_DATA(hdr) = fd2pass;
没有GCC提出这个:
error: dereferencing type-punned pointer will break strict-aliasing rules
以与这些选项兼容的方式:
-Wall -Werror -pedantic
答案 0 :(得分:6)
除非出现问题,否则没有实际的别名 - *(int *)引用的对象CMSG_DATA(hdr)不是hdr的别名 - 它已经过了hdr的末尾。警告不正确。
您可以使用memcpy解决这个问题:
memcpy(CMSG_DATA(hdr), &fd2pass, sizeof(int));
不要使用-fno-strict-aliasing:禁用假定严格别名的优化;它可能会产生相当糟糕的代码。
有关技术详情,请参阅glibc bug 16197。
答案 1 :(得分:-2)
尝试将 -fno-strict-aliasing 传递给gcc。
要了解严格别名主题,请查看此question。