は考えてみましょう:整数型とそれ以上の型に対して "i:= i + 1"で範囲チェックエラーが発生しないのはなぜですか?
{$R+}
i:= 1;
While i > 0 do
i:= i + 1;
ShowMessage(IntToStr(i));
私はバイト、ワード、ShortintまたはTINYINTとしてi
を宣言すると、予想通り、私は、範囲チェックエラーが発生します。 LongWord、Cardinal、Integer、LongIntまたはInt64としてi
を宣言すると、whileループを通過し、負の値または0の値が表示されます。上限を渡すとi
が得られます。
デルファイ7は、32ビットと64ビットの数値の範囲チェックをサポートしていませんか?
感謝を。私はいくつかのテストを行い、代わりにi + 1を追加しました.i + jに同じタイプのiとjの両方を追加しました。これは同じ問題を引き起こしました。ですから、私は "+"演算子が結果を整数にすると言います。 しかし、私がInc(i)を使用すると、私が使用するタイプにかかわらず、私はrangecheckエラーを取得しません。私は{$ Q +}が私に整数オーバーフローの例外を与えることを発見しました。 –
申し訳ありませんが、それはQであってはいけませんでした。O: – JamesT
最終的に私は仕事に間違ったツールを使用していましたので、rangecheckではなくオーバーフローを探していたはずです。 –