Delphi компиляции целочисленного преобразования предупреждения?
В Delphi XE или 2006, есть ли способ обнаружить во время компиляции, что неявные преобразования между целыми типами могут потерять данные? Я понимаю, что это можно обнаружить с проверкой времени выполнения. Я бы хотел, чтобы он отметил следующий пример , даже если "большое" значение было 1. (Мы рассматриваем возможность изменения int на bigint для определенных ключей базы данных и хотим определить влияние на большую устаревшую кодовую базу.)
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
small: Integer;
big: Int64;
begin
big := 3000000000000;
small := big; // Detect me!
Writeln(small);
end.
Ответы
Ответ 1
Вы не получите никаких предупреждений или подсказок во время компиляции. Компилятор Delphi делает не анализ любой программы, который сообщает, что big
содержит слишком большое значение, когда ему присваивается small
. Он тихо усекает значение, чтобы он соответствовал типу меньшего размера. Я пробовал с Shortint
, подписанный тип размера байта, и даже это не давало предупреждения или подсказки.
И нет способа заставить Delphi предупредить вас. Это было бы хорошо. Возможно, вы можете предложить его в QC (если он еще не был предложен)?
Ответ 2
В Delphi даже в Delphi 10.3 - нет. Но взгляните на программное обеспечение, называемое "Pascal Analyzer", производитель www.peganza.com.
У них есть много вариантов, и один из них (взят из справки программного обеспечения):
![enter image description here]()
Исходный код для теста, посмотрите на строку # 32:
![enter image description here]()
Анализ результатов показывает возможное неправильное назначение в строке № 32:
![enter image description here]()