procedure TfrmAllMiracles.btnLowIntMrclClick( Sender: TObject); var lowInt: integer; begin lowInt := -2147483648; ShowMessageFmt('%d',[lowInt]); end; Figure 4. |
Видимо компилятор пытается определить константу целого типа со значением 2147483648, а только затем изменить ее знак, но это ему не удается. Перепишем код:
procedure TfrmAllMiracles.btnLowIntMrclClick( Sender: TObject); var lowInt: integer; begin lowInt := -int64(2147483648); // lowInt := -2147483648; ShowMessageFmt('%d',[lowInt]); end; Figure 5. |
Вот теперь - все нормально. Пример очень незамысловат, но дает нам представление о том, как компилятор Delphi обрабатывает константы и определяет их тип.
А вот следующее чудо - пример того, к какой путанице может привести перегрузка функций. Такие чудеса мы зачастую сами устраиваем себе по невнимательности, а потом часами ищем ошибки.