История изменений
Исправление byko3y, (текущая версия) :
структуры не удовлетворяют условию strict aliasing. мы задекорировали проблему, кастуя указатели на эти структуры
Кастовать указатель можно - разыменовывать нельзя. Вот мы и не разыменовываем - только берем адрес поля. В обоих структурах есть int, мы инициализируем int и читаем int - всё по фен шую.
хороший компилятор и тут плюнет варнингом
Это уже додумки разрабов компилятора и не соответствует стандарту.
можно в файл записать содержимое первой структуры, а потом прочитать во вторую, или как нибудь еще сломать мозг компайлеру, но зачем?
Затем, чтобы продемонстировать, что гуглящееся в интернете и написанное в доках GCC strict aliasing имеет мало общего со стандартом Си. Напомню, что изначально разговор шел о том, что какие-то там негодяи нарушают strict aliasing, и именно потому они виноваты, а компиляторы - правы.
Исходная версия byko3y, :
структуры не удовлетворяют условию strict aliasing. мы задекорировали проблему, кастуя указатели на эти структуры
Кастовать указатель можно - разыменовывать нельзя. Вот мы и не разыменовываем - только берем адрес поля. В обоих структурах есть int, мы инициализируем int и читаем int - всё по фен шую.
хороший компилятор и тут плюнет варнингом
Это уже додумки разрабов компилятора и не соответствует стандарту.
можно в файл записать содержимое первой структуры, а потом прочитать во вторую, или как нибудь еще сломать мозг компайлеру, но зачем?
Затем, чтобы продемонстировать, что гуглящееся в интернете и написанное в доках strict aliasing имеет мало общего со стандартом Си. Напомню, что изначально разговор шел о том, что какие-то там негодяи нарушают strict aliasing, и именно потому они виноваты, а компиляторы - правы.