回帰テストを手伝って、以下のコードがどの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
これは、 QC90921の一部でもあるコードです。
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年
- XE
--jeroen