Помогите мне регрессионным тестом и определите, в каких версиях Delphi код, приведенный ниже, не работает.
Редактировать: Я знаю, что для этого есть подсказка компилятора; это было на самом деле найдено в проекте, который я унаследовал, так как каким-то образом были отключены подсказки компилятора (что, как я вижу, многие люди делают, так как считают, что подсказки компилятора всегда безвредны, в данном случае это не так).
Еще я хочу знать, в каких версиях Delphi эта аномалия компилятора присутствует в целях документации.
[DCC Hint] QC90921_SO4717399TestCase.pas(47): H2135 FOR or WHILE loop executes zero times - deleted
В Delphi XE, 2009, 2007 и 5 происходит сбой при выводе ниже.
У меня еще не было времени исследовать другие версии Delphi.
Пожалуйста, помогите мне с этим, и ответьте, с какими другими версиями Delphi он тоже не работает.
Low/High const fail: 0
Low/High hex literal fail: 0
Low/High decimal literal fail: 0
Этот код также является частью QC 90921 :
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
CardinalIndex: Cardinal;
CardinalFirst: Cardinal;
CardinalLast: Cardinal;
Count: Int64;
Target: Int64;
begin
try
Target := High(Cardinal);
Inc(Target);
Count := 0;
for CardinalIndex := Low(CardinalIndex) to High(CardinalIndex) do
Inc(Count);
if Target <> Count then
Writeln('Low/High const fail: ', Count);
Count := 0;
for CardinalIndex := 0 to $FFFFFFFF do
Inc(Count);
if Target <> Count then
Writeln('Low/High hex literal fail: ', Count);
Count := 0;
for CardinalIndex := 0 to 4294967295 do
Inc(Count);
if Target <> Count then
Writeln('Low/High decimal literal fail: ', Count);
Count := 0;
CardinalFirst := Low(Cardinal);
CardinalLast := High(Cardinal);
for CardinalIndex := CardinalFirst to CardinalLast do
Inc(Count);
if Target <> Count then
Writeln('Low/High variable fail: ', Count);
Count := 0;
CardinalFirst := 0;
CardinalLast := $FFFFFFFF;
for CardinalIndex := CardinalFirst to CardinalLast do
Inc(Count);
if Target <> Count then
Writeln('hex literal Variable fail: ', Count);
Count := 0;
CardinalFirst := 0;
CardinalLast := 4294967295;
for CardinalIndex := CardinalFirst to CardinalLast do
Inc(Count);
if Target <> Count then
Writeln('decimal literal Variable fail: ', Count);
Write('Press <Enter>');
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Редактировать: Сводка ответов; это терпит неудачу в этих версиях Delphi:
- 5
- 6
- 7
- 2006
- 2007
- 2009
- 2010
- Х
- Йерун