簡體   English   中英

C,Unix域套接字,輔助數據和GCC;使用CMSG_DATA宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM