Занимаюсь переносом старого приложения с 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?
Если мое предположение относительно автоматического приведения типов неверно, дайте, пожалуйста, подсказку, что еще влияет и как исправить малой кровью.