Delphi предупреждение о целочисленном преобразовании во время компиляции? - PullRequest
10 голосов
/ 29 июля 2011

В 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.

Ответы [ 2 ]

10 голосов
/ 29 июля 2011

Вы не получите никаких предупреждений или подсказок во время компиляции. Компилятор Delphi не выполняет какой-либо анализ потока программы, который говорит ему, что big содержит слишком большое значение, когда оно присваивается small. Он молча обрезает значение, чтобы оно соответствовало меньшему типу. Я пробовал с Shortint, подписанным типом байтового размера, и даже это не давало предупреждения или подсказки.

И нет способа заставить Дельфи предупредить вас. Это было бы хорошо. Возможно, вы можете предложить это в QC (если это еще не было предложено)?

1 голос
/ 11 января 2019

В Delphi даже в Delphi 10,3 - нет.Но взгляните на программное обеспечение, называемое «Pascal Analyzer», mfg by www.peganza.com

У них много вариантов, и один из них (взят из справки по программному обеспечению):

enter image description here

Исходный код для теста, посмотрите на строку # 32:

enter image description here

Анализ результатов показывает возможное неправильное назначение в строке № 32:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...