Subranges in Pascal

3

Sto leggendo un po 'di codice Pascal e tutto è piuttosto semplice, tranne i subranges. Nel programma che sto leggendo c'è una variabile d con la seguente dichiarazione di tipo: array[0..22] of 0..15 ; c'è poi la seguente procedura:


var a:integer;
begin
  a:=0;
  while k>0 do
    begin
      k:=k-1;
      a:=(a+dig[k]*two) div 10;
    end;
  round_decimals:=(a+1) div 2;
end;

Dove k è una variabile di tipo 0..63 . Quindi, dato che k può essere sopra l'intervallo dell'indice di dig come funziona questo codice? - È una routine per fare aritmetica in virgola fissa e quindi suppongo che l'array indicie trabocchi in qualche modo controllato, ma se qualcuno potesse spiegare il comportamento esatto sarei davvero felice. Inoltre, gli array Pascal si assegnano in qualche modo conosciuto? C'erano molte versioni di Pascal e penso che questo programma sia scritto in un modo abbastanza "agnostico in versione Pascal", ma non trovo molte spiegazioni sulla semantica sottile delle espressioni subrange.

    
posta veryfoolish 21.05.2013 - 19:33
fonte

2 risposte

2

Dipende dalla variante Pascal. Nelle versioni gestite, come Oxygene o il linguaggio di scripting DWS, l'assegnazione dei limiti di un array genera sempre un'eccezione in fase di runtime. In Delphi e FPC, l'assegnazione di limiti di un array dovrebbe generare un'eccezione in fase di runtime, e lo fa per impostazione predefinita, ma c'è un'opzione per disattivare il controllo dei limiti tramite una direttiva del compilatore. Il comportamento di altri compilatori Pascal varierà in base al fatto che generino o meno il controllo del codice.

    
risposta data 21.05.2013 - 19:41
fonte
0

Capito; gli intervalli sono stati scelti per allineamento / offset. Dal momento che Pascal (almeno la vecchia versione di Pascal che sto leggendo) non ha brevi intervalli, ecc. Questa era l'alternativa. Sono contento di non scrivere il codice Pascal. Ad ogni modo, non aveva davvero nulla a che fare con il controllo dei limiti e [...] era precaricato nel caso qualcuno si stesse chiedendo (ne dubito). Caso chiuso.

    
risposta data 21.05.2013 - 21:02
fonte

Leggi altre domande sui tag