dhe*_*ein 4 c sockets gcc strict-aliasing
我问自己,我可以使用严格别名的BSD套接字,而不是通过编译gcc获得未定义的行为吗?
bind(sdListen, (struct sockaddr*)&sockaddr_inIdentifier, sizeof(sockaddr_inIdentifier))
Run Code Online (Sandbox Code Playgroud)
据我所知,这行代码打破了严格的别名规则(并且gcc给了我相同的警告).那么是否有一个计划b,在O3模式下使用套接字而不转向严格的数据?当然没有违反规定?或者我是否必须运行一个可以在所有系统/编译器上运行的套接字系统?
该行中的强制转换本身不会破坏严格的别名规则.如果bind()指针的解除引用没有将其转换回正确的类型,则该规则只会被破坏.
任何严格的别名问题对于实现者而bind()不是用户都存在问题.