2014-05-13 5 views
6
const 
    minDriveFreeSpace: Int64 = 1024*1024*1024*99; 

델파이의 최대 또는 최소 제한값. 상수 값?

var 
    minDriveFreeSpace: Int64; 
begin 
    minDriveFreeSpace := 1024*1024*1024*99; 

가 방출됩니다

[dcc32 Error] DataStoreLocator.pas(92): E2099 Overflow in conversion or arithmetic operation 

델파이의 최대의 버그 또는 한계입니다. 상수 값?

+0

재미있는! 데이비드 (David)가 지적한 유사한 (중복 된) 질문에서 디스크 원점을 나타내는 것과 관련이있는 것 같습니다. –

답변

10

오른쪽에있는 값 하나 이상을 Int64 (으)로 캐스팅해야합니다. 예를 들어,이 두 가지 모두 XE6에서 완벽하게 컴파일됩니다.

const 
    minDriveFreeSpace = Int64(1024) * 1024 * 1024 * 99; 

var 
    minDriveFreeSpace2: Int64; 
begin 
    minDriveFreeSpace2 := Int64(1024)*1024*1024*99; 

캐스팅되는 rvalues ​​중 하나 일 수 있습니다. 예를 들어,이 똑같이 잘 작동 :

const 
    minDriveFreeSpace = 1024 * 1024 * 1024 * Int64(99); 

이 (오히려 가난하지만)을 Delphi language guide에 설명되어 있습니다 - 중점을 내 : 일반적으로

을, 정수 산술 연산은 값을 반환 Integer는 32 비트 LongInt와 동일합니다. 하나 이상의 Int64 피연산자에서 수행 할 경우에만 Int64 유형의 값을 반환합니다. 따라서, 다음과 같은 코드가 생성하는 잘못된 결과 :

var 
I: Integer; 
J: Int64; 
... 
I := High(Integer); 
J := I + 1; 

가 INT64 나는 캐스팅이 상황에서 Int64를 반환 값을 얻으려면 :

... 
J := Int64(I) + 1; 
+0

감사합니다 Ken, 내 해결 방법 (질문에 표시되지 않은) 조금 더 자세한 정보 : P –