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

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

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

Сообщение dmitri » 21 дек 2015, 23:28

Мои сотридники показали мне код, он работает в 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

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

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

Сообщение George » 22 дек 2015, 11:17

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

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

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

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

Сообщение idl » 22 дек 2015, 11:19


Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA
Контактная информация:

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

Сообщение dmitri » 24 дек 2015, 01:43

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

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва
Контактная информация:

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

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

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

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

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва
Контактная информация:

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

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

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



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



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

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

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

Сообщение George » 14 янв 2016, 12:37

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.

Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA
Контактная информация:

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

Сообщение dmitri » 28 янв 2016, 01:51

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

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва
Контактная информация:

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

Сообщение dmi » 28 янв 2016, 23:53

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


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

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



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