[英]C, Unix Domain Sockets, Ancillary data, and GCC; Using CMSG_DATA macro
我怎樣才能做到這一點:
*(int *)CMSG_DATA(hdr) = fd2pass;
沒有GCC提出這個:
error: dereferencing type-punned pointer will break strict-aliasing rules
以與這些選項兼容的方式:
-Wall -Werror -pedantic
除非出現非常錯誤,否則不會發生實際的別名 - *(int *)引用的對象CMSG_DATA(hdr)不是hdr的別名 - 它已超過hdr的末尾。 警告不正確。
你可以用memcpy解決它:
memcpy(CMSG_DATA(hdr), &fd2pass, sizeof(int));
不要使用-fno-strict-aliasing:禁用假定嚴格別名的優化; 它可能會產生相當糟糕的代碼。
有關技術細節,請參閱glibc bug 16197 。
嘗試將-fno-strict-aliasing傳遞給gcc。
要了解嚴格的別名主題,請查看此問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.