Я спрашиваю себя, могу ли я использовать сокеты BSD со строгим псевдонимом, не получая неопределенного поведения, компилируя с помощью gcc?Berkley Sockets, нарушающие правила наложения псевдонимов?
bind(sdListen, (struct sockaddr*)&sockaddr_inIdentifier, sizeof(sockaddr_inIdentifier))
Эта строка коды разбивает строгое правило сглаживания, насколько я знаю (и НКА дает мне такое же предупреждение). , так есть план b, используя сокеты в режиме O3 без поворота strictaliasing? И, конечно, не нарушая правила? или мне нужно запустить собственную систему сокетов, которая будет запущена во всех системах/компиляторах?
Итак, не существует способа использования сокетов при соблюдении правила строгого сглаживания? Каковы результаты, я не могу позволить компилятору оптимизировать мой исходный код, не рискуя неопределенным поведением? – dhein
@Zaibis: * Использование * BSD Sockets не требует нарушения правила строгого сглаживания. Кроме того, разработчик API сокетов вашей платформы предположительно потрудился, чтобы убедиться, что реализация также определила поведение. – caf
Ну, я попробовал это сейчас на freeBSD10.0 9.1 и Debian 6. dunno ... результат был тот же, когда компилировался с gcc. Так я правильно понял, что происходит внутри Bind() решает, что бросок нарушит правила или нет? и из-за пределов gcc просто говорит мне, что это может нарушить правила? поэтому я не могу скомпилировать код приложения сокета BSD с обработкой предупреждений как ошибок, потому что нет способа избежать этого предупреждения? – dhein