Подтвердить что ты не робот

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.
4b9b3361

Ответ 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