Занимаюсь переносом старого приложения с Delphi на Lazarus. В коде много где встречаются вычисления, в которых в качестве параметров учавствуют переменные разных типов. При вычислении и сохранении в переменную типа Cardinal приложение падает, если один из параметров byte. Падает на этапе вычисления, хотя результат не превышает допустимое значение.
Например, при таком коде приложение упадет:
- Код: Выделить всё
- var
 ReturnData0: byte;
 WholeData: Cardinal;
 begin
 ReturnData0:=230;
 WholeData:=ReturnData0*$1000000;
 end;
Если его переписать немного, то уже проходит нормально:
- Код: Выделить всё
- var
 ReturnData0: byte;
 WholeData, ReturnData01: Cardinal;
 begin
 ReturnData0:=230;
 ReturnData01:=ReturnData0;
 WholeData:=ReturnData01*$1000000;
 end;
Таких участков кода довольно много. Проверять весь код очень долго. Да и вдруг что-то пропущу, может, еще где-то такие же сюрпризы возникают.
Подозреваю, что все дело в автоматическом приведении типов при компиляции. Если так, есть ли возможность указать компилятору, чтобы все вычсиления выполнялись правильно сразу, без присваивания значения типа byte дополнительной переменной типа Cardinal?
Если мое предположение относительно автоматического приведения типов неверно, дайте, пожалуйста, подсказку, что еще влияет и как исправить малой кровью.







 Lazarus ведь работает на основе fpc, так что считать он будет то же, что и fpc (см. рисунок).
 Lazarus ведь работает на основе fpc, так что считать он будет то же, что и fpc (см. рисунок).