Re[5]: свой фреймворк
От: maks1180  
Дата: 24.11.22 22:12
Оценка:
BFE>За последний месяц меня 4 раза звали искать ошибку в чужом коде (я работаю консультантом). Так вот: дважды это было нарушение ODR при подключении новых библиотек; в первом случае пересечение по имени структуры (две разные структуры в двух разных библиотеках с совпадающими именами), во втором — совпадение по имени define с разными значениями для размера массива внутри структуры.

Разве компилятор не ругается когда встречает отпределение структуры которая уже определена ? То же самое и с define должно быть.
===============================================
(реклама, удалена модератором)
Отредактировано 24.11.2022 22:12 maks1180 . Предыдущая версия .
Re[6]: свой фреймворк
От: qaz77  
Дата: 25.11.22 09:17
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Разве компилятор не ругается когда встречает определение структуры которая уже определена ? То же самое и с define должно быть.


Обычно, нарушение ODR бывает, когда в разных единицах трансляции одноименные вещи чем-то отличаются.
Потом линковщик выбирает одну из реализаций и для объектников, которым не повезло, используется несоответствующее определение.
Например, структура или массив не того размера.

С т.з. компилятора для каждой единицы трансляции видно одно определение и это не ошибка.

Также и макросами, для них более того и переопределение не запрещено.
Если перед переопределением делать #undef, то и предупреждения не будет.
Re[4]: свой фреймворк
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 28.11.22 01:42
Оценка:
Здравствуйте, Igore, Вы писали:

W>>>Короче говоря: хотите, чтоб люди пользовались, делайте как общепринято, а не как вы считаете нужным.

M>>Не соглашусь. QT по своему называют, например quint32 и люди пользуются — не плюются от этого.
I>Тебе уже написали откуда это всё взялось, на новом Qt6 они наоборот расширили интерфейсы чтобы работать со стандартными контейнерами и типами, а QMap, qint остались для совместимости.

В пятом Qt по-моему любой класс можно использовать вместо STL класса. Это вроде ещё с 4ой версии началось, но не уверен. В Qt5 я вот только одного не пойму — QString практически полностью совместим по интерфейсу с std::striing, но, сцуко, у QString нет метода empty(), только isEmpty(). Повбывав бы
Маньяк Робокряк колесит по городу
Re[6]: свой фреймворк
От: B0FEE664  
Дата: 28.11.22 10:57
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Разве компилятор не ругается когда встречает отпределение структуры которая уже определена ? То же самое и с define должно быть.


Ругается, но если два файла .cpp скомпилированы с разными заголовками, т.е. подключают разные .h, то совпадение по именам в этих .h файлах приводят к тому, что в .obj (.o, .lib) будут лежать определения с одинаковыми именами, но разными значениями/определениями. Компоновщик при линковке выбирает только одно значение/определение, а второе отбрасывает, что приводит к UB, которое иногда приводит к краху при исполнении.
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.