小编Bla*_*ank的帖子

修复取消引用类型惩罚指针将破坏严格别名

我正在尝试使用GCC编译特定程序时修复两个警告.警告是:

警告:解除引用类型惩罚指针将破坏严格别名规则[-Wstrict-aliasing]

而这两个罪魁祸首是:

unsigned int received_size = ntohl (*((unsigned int*)dcc->incoming_buf));
Run Code Online (Sandbox Code Playgroud)

*((unsigned int*)dcc->outgoing_buf) = htonl (dcc->file_confirm_offset);
Run Code Online (Sandbox Code Playgroud)

incoming_bufoutgoing_buf定义如下:

char                    incoming_buf[LIBIRC_DCC_BUFFER_SIZE];

char                    outgoing_buf[LIBIRC_DCC_BUFFER_SIZE];
Run Code Online (Sandbox Code Playgroud)

这似乎与我一直在研究的那个警告的其他例子略有不同.我宁愿修复问题而不是禁用严格别名检查.

有很多建议要使用工会 - 这个案例可能是一个合适的工会?

c strict-aliasing type-punning

24
推荐指数
3
解决办法
5万
查看次数

标签 统计

c ×1

strict-aliasing ×1

type-punning ×1