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

eBug o limite massimo di Delphi. valori interi costanti?

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

emetterà:

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

È questo un bug o limite massimo di Delphi. valori interi costanti?

+0

Interessante! Sembra che sia anche correlato alla rappresentazione dello spce del disco in quella domanda (duplicata) simile segnalata da David. –

risposta

10

È necessario trasmettere almeno un valore sul lato destro a Int64. Per esempio, entrambe queste compilare perfettamente su XE6:

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

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

Nota che può essere uno qualsiasi dei rvalues ​​che vengono espressi. Ad esempio, questo funziona altrettanto bene:

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

Questo è documentato nella Delphi language guide (anche se piuttosto mal) - enfasi miniera:

In generale, le operazioni aritmetiche su interi restituiscono un valore di digitare Intero, che è equivalente al LongInt a 32 bit. Le operazioni restituiscono un valore di tipo Int64 solo quando eseguito su uno o più operandi Int64. Pertanto, il seguente codice produce risultati non corretti:

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

per ottenere un valore di ritorno Int64 in questa situazione, ho lanciato come Int64:

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

Grazie Ken, la mia soluzione alternativa (che non è stata visualizzata nella domanda) è stata un po 'più prolissa: P –

Problemi correlati