-
Это уже будет обход бага. Мы проверяем неявное, а не явное приведение типов.
почему же он должен корректно производить арифметические действия с несовместимыми типами?
Он должен вываливаться с ошибкой типизации примерно вот так:
sshot.png
Зависимость результата от порядка слагаемых в таком случае говорит о приведении по левому операнду. Значит, должно происходить неявное приведение правого операнда к совместимому налево типу, но этого явно не происходит. Это примерно как reinterpret_cast когда должно быть static_cast (C++). Представьте, что пытаясь сложить REAL#3.42 и DINT#5 в DINT вы получаете DINT#12000334 вместо ошибки (если сильная типизация) или DINT#8 с предупреждением о потере точности (если слабая типизация). Но именно такая хрень типа DINT#12000334 получается с комбинацией "DATE слева TIME справа". И по всем признакам (вроде необходимости делать REAL_TO_DINT) языки IEC61131 должны быть сильно типизированными.
Даже ещё проще. Если возможно неявное приведение TIME к DATE в качестве одного из арифметических операндов, то должно быть возможно и приведение в качестве правого операнда присваивания, но ведь его нет:
sshot.png
Тупо баг компилятора, причём в третьей версии то же самое.
Последний раз редактировалось Yegor; 13.01.2015 в 19:50.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума