伯克利套接字,打破别名规则?

时间:2013-08-01 08:11:58

标签: c sockets gcc strict-aliasing

我问自己,我可以使用带有严格别名的BSD套接字,而不会通过使用gcc进行编译来获得未定义的行为吗?

bind(sdListen, (struct sockaddr*)&sockaddr_inIdentifier, sizeof(sockaddr_inIdentifier))

据我所知,这行代码打破了严格的别名规则(并且gcc给了我相同的警告)。 那么是否有一个计划b,在O3模式下使用套接字而不转向严格的数据? 当然没有违反规定? 或者我是否必须运行一个可以在所有系统/编译器上运行的套接字系统?

1 个答案:

答案 0 :(得分:5)

该行中的强制转换本身不会破坏严格的别名规则。只有当bind()的实现取消引用该指针而不将其转换回正确的类型时,该规则才会被破坏。

任何严格的别名问题都会导致bind()的实施者出现问题,而不是用户。