Показано с 1 по 10 из 365

Тема: CoDeSys v2.3

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #19
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    а попробуйте
    Это уже будет обход бага. Мы проверяем неявное, а не явное приведение типов.
    почему же он должен корректно производить арифметические действия с несовместимыми типами?
    Он должен вываливаться с ошибкой типизации примерно вот так:

    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.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •