LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

структуры не удовлетворяют условию strict aliasing. мы задекорировали проблему, кастуя указатели на эти структуры

Кастовать указатель можно - разыменовывать нельзя. Вот мы и не разыменовываем - только берем адрес поля. В обоих структурах есть int, мы инициализируем int и читаем int - всё по фен шую.

хороший компилятор и тут плюнет варнингом

Это уже додумки разрабов компилятора и не соответствует стандарту.

можно в файл записать содержимое первой структуры, а потом прочитать во вторую, или как нибудь еще сломать мозг компайлеру, но зачем?

Затем, чтобы продемонстировать, что гуглящееся в интернете и написанное в доках GCC strict aliasing имеет мало общего со стандартом Си. Напомню, что изначально разговор шел о том, что какие-то там негодяи нарушают strict aliasing, и именно потому они виноваты, а компиляторы - правы.

Исходная версия byko3y, :

структуры не удовлетворяют условию strict aliasing. мы задекорировали проблему, кастуя указатели на эти структуры

Кастовать указатель можно - разыменовывать нельзя. Вот мы и не разыменовываем - только берем адрес поля. В обоих структурах есть int, мы инициализируем int и читаем int - всё по фен шую.

хороший компилятор и тут плюнет варнингом

Это уже додумки разрабов компилятора и не соответствует стандарту.

можно в файл записать содержимое первой структуры, а потом прочитать во вторую, или как нибудь еще сломать мозг компайлеру, но зачем?

Затем, чтобы продемонстировать, что гуглящееся в интернете и написанное в доках strict aliasing имеет мало общего со стандартом Си. Напомню, что изначально разговор шел о том, что какие-то там негодяи нарушают strict aliasing, и именно потому они виноваты, а компиляторы - правы.