Регистрация

version 11.6 код не компилируется

Обсуждение вопросов по разработке программ в среде продуктов копорации "Progress Software"
Старожил
Аватара пользователя
Сообщения: 1016
Зарегистрирован: Чт авг 04, 2005 5:19 pm
Откуда: Pennsylvania, USA

version 11.6 код не компилируется

Сообщение dmitri » Вт дек 22, 2015 12:28 am

Мои сотридники показали мне код, он работает в 10-ке (10.2B), но не работает в 11-ой. (11.6)
** Incompatible data types in expression or assignment. (223)

def var icode as int.

icode = if icode eq 0 then 10
else icode = icode + 10.

Я понимаю что код написан через за...
Но у меня возник вопрос, почему вдруг в 11-ой перестал работать код?.
может ешё что то перестанет работать после upgrade

Старожил
Аватара пользователя
Сообщения: 2871
Зарегистрирован: Ср май 12, 2004 6:03 pm
Откуда: Питер

Re: version 11.6 код не компилируется

Сообщение George » Вт дек 22, 2015 12:17 pm

dmitri писал(а):Я понимаю что код написан через за...
Но у меня возник вопрос, почему вдруг в 11-ой перестал работать код?.

В зависимости от начального значения конечное значение icode может быть равно только 10, 1 и 0. Я уверен, что этот результат - явно не то, что задумывал программист. Так что 11-ая версия Progress'а просто исправила ошибку предыдущей версии.

Старожил
Сообщения: 94
Зарегистрирован: Чт май 21, 2009 4:41 pm

Re: version 11.6 код не компилируется

Сообщение idl » Вт дек 22, 2015 12:19 pm


Старожил
Аватара пользователя
Сообщения: 1016
Зарегистрирован: Чт авг 04, 2005 5:19 pm
Откуда: Pennsylvania, USA

Re: version 11.6 код не компилируется

Сообщение dmitri » Чт дек 24, 2015 2:43 am

Спасибо. С наступаюшими всех праздниками.

Старожил
Аватара пользователя
Сообщения: 1523
Зарегистрирован: Чт сен 27, 2001 4:00 am
Откуда: Москва

Re: version 11.6 код не компилируется

Сообщение dmi » Ср янв 13, 2016 7:43 pm

но у Дмитрия везде int возвращается? Я не понимаю, почему не работает этот код.
/dmi

http://pro4gl.ru - 4gl блог

Старожил
Аватара пользователя
Сообщения: 1523
Зарегистрирован: Чт сен 27, 2001 4:00 am
Откуда: Москва

Re: version 11.6 код не компилируется

Сообщение dmi » Ср янв 13, 2016 7:50 pm

dmi писал(а):но у Дмитрия везде int возвращается? Я не понимаю, почему не работает этот код.



upd. Понял. Хитро )))) не сразу поймешь.
Вообще OE с автоприведением типов расслабляет. При миграции 9 -> 10 было прикольно пару раз.
/dmi

http://pro4gl.ru - 4gl блог

Старожил
Аватара пользователя
Сообщения: 2871
Зарегистрирован: Ср май 12, 2004 6:03 pm
Откуда: Питер

Re: version 11.6 код не компилируется

Сообщение George » Чт янв 14, 2016 1:37 pm

dmi писал(а):Понял. Хитро )))) не сразу поймешь.


Чтобы было всем понятно - вопрос еще и в последовательности операций (в расставлении скобок).
Код:
Код: Выделить всё
icode = if icode eq 0 then 10
else icode = icode + 10.

интерпретировался как:
Код: Выделить всё
icode = if icode eq 0 then 10
else integer(icode eq (icode + 10)).


integer(icode eq (icode + 10)) всегда возвращает 0 кроме случая, когда icode имеет неопределенное значение. В последнем случае результат будет равен единице.

По сути исходный код был эквивалентен:
Код: Выделить всё
CASE icode:
  WHEN 0 THEN ASSIGN icode = 10.
  WHEN ? THEN ASSIGN icode = 1.
  OTHERWISE   ASSIGN icode = 0.
END CASE.

Старожил
Аватара пользователя
Сообщения: 1016
Зарегистрирован: Чт авг 04, 2005 5:19 pm
Откуда: Pennsylvania, USA

Re: version 11.6 код не компилируется

Сообщение dmitri » Чт янв 28, 2016 2:51 am

Я не знаю какую травку курил индивидуум писавший сей код.
Но очевидно что в ОЕ 11 компилятор к такому коду подходит строже.
И вопросы которые мне задают -- "А что есть ешё где то что то компилироваться не будет в 11.6 ?"

Старожил
Аватара пользователя
Сообщения: 1523
Зарегистрирован: Чт сен 27, 2001 4:00 am
Откуда: Москва

Re: version 11.6 код не компилируется

Сообщение dmi » Пт янв 29, 2016 12:53 am

dmitri писал(а):Я не знаю какую травку курил индивидуум писавший сей код.
Но очевидно что в ОЕ 11 компилятор к такому коду подходит строже.
И вопросы которые мне задают -- "А что есть ешё где то что то компилироваться не будет в 11.6 ?"


А тут как : пока не скомпилишь - не узнаешь.
Еше в RUNTIME можно налететь. У меня так activeX возвращал не того типа параметр. 9.1D автоматически приводил к нужному типу, а вот 10.1 уже стал делать правильно.

Такие ошибки еще чреваты тем, что ты же не знаешь, как решили поставить костыль в другом месте к этому счетчику. Порой бывает, что исправив явно левый код я получал странные ошибки уже много дальше. Потом выяснилось, что кто-то увидел странность, вписал свою поправку, не стал искать причину и пошел дальше. В больших софтах такое бывает.
/dmi

http://pro4gl.ru - 4gl блог

Вернуться в PROGRESS - 4GL - ПРОГРАММИРОВАНИЕ

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4