我问自己,我可以使用带有严格别名的BSD套接字,而不会通过使用gcc进行编译来获得未定义的行为吗?
bind(sdListen, (struct sockaddr*)&sockaddr_inIdentifier, sizeof(sockaddr_inIdentifier))
据我所知,这行代码打破了严格的别名规则(并且gcc给了我相同的警告)。 那么是否有一个计划b,在O3模式下使用套接字而不转向严格的数据? 当然没有违反规定? 或者我是否必须运行一个可以在所有系统/编译器上运行的套接字系统?
答案 0 :(得分:5)
该行中的强制转换本身不会破坏严格的别名规则。只有当bind()
的实现取消引用该指针而不将其转换回正确的类型时,该规则才会被破坏。
任何严格的别名问题都会导致bind()
的实施者出现问题,而不是用户。