[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 576.   C: annotazioni sulla terminologia

I documenti che descrivono lo standard del linguaggio C utilizzano una terminologia specifica. In questo capitolo si descrivono alcuni di quei termini con delle annotazioni riguardo al contesto a cui si riferiscono.

576.1   Parametri e argomenti

Generalmente, i termini «argomento» e «parametro», riferiti alle funzioni o alle procedure dei linguaggi di programmazione, vengono usati in modo intercambiabile, benché si intuisca una differenza tra i due. Lo standard C chiarisce l'ambito corretto di utilizzo per entrambi: i valori annotati in una chiamata di funzione sono gli argomenti attuali; le variabili che descrivono formalmente ciò che una funzione deve ricevere dall'esterno sono i parametri formali.

Figura 576.1. Distinzione tra parametri e argomenti.

parametri e argomenti

576.2   Byte e caratteri

Secondo il linguaggio C, il byte è l'unità di memorizzazione più piccola che possa essere utilizzata per contenere un carattere, tra quelli dell'insieme minimo. Pertanto, per definizione, il tipo char (indifferentemente se con o senza segno) occupa esattamente un byte.

In pratica, per il linguaggio C il byte non è necessariamente un insieme di otto bit, anche se di norma questa corrispondenza è valida.

Va considerato anche che il tipo char, senza altre indicazioni, può essere inteso come valore con segno o senza segno, a seconda della piattaforma. Tuttavia, come punto fermo, l'insieme di caratteri minimo deve essere rappresentabile con valori positivi. In pratica, di norma questo insieme minimo di caratteri corrisponde alla codifica ASCII, la quale si rappresenta completamente con 7 bit, pertanto l'ottavo bit di un byte standard potrebbe essere usato come segno, senza interferire con l'interpretazione corretta dei caratteri. In altri termini, per utilizzare il tipo char in modo compatibile da una piattaforma all'altra, questo va considerato solo per i valori utili alla rappresentazione dell'insieme di caratteri minimo, con i quali si ha la certezza di avere a che fare sempre solo con valori positivi.

576.3   Unità di traduzione

Il file generato dal precompilatore, formato normalmente dall'incorporazione di diversi file, viene definito una unità di traduzione. Il concetto di «traduzione» deriva dal fatto che il precompilatore, oltre a incorporare altri file, traduce le macro-variabili e le macro-istruzioni espandendole secondo la loro dichiarazione; pertanto, i file sorgenti originali subiscono una prima trasformazione che produce il codice C vero e proprio.

Quando si fa riferimento al campo di azione delle variabili definite al di fuori delle funzioni, si afferma che questo riguarda l'ambito del file. In tal caso, per file si intende l'unità di traduzione.

576.4   «Linkage»

Quando si fa riferimento a variabili o funzioni che sono dichiarate esternamente a tutte le funzioni, il campo di azione è legato al file (nel senso di unità di traduzione), essendo accessibili solo a partire dalla dichiarazione stessa. Quando si combinano assieme più file attraverso il meccanismo del «collegamento» (link), il programma che esegue questo compito tratta i nomi uguali di variabili e di funzioni nel senso di un riferimento alla stessa cosa (la stessa variabile o la stessa funzione). Quando una variabile o una funzione è dichiarata in modo tale da consentire questo collegamento, si ha un linkage esterno; quando la dichiarazione è tale da impedirlo (con lo specificatore di classe di memorizzazione static), si ha un linkage interno.

Si può rendere esplicito che una variabile o una funzione sono da cercarsi al di fuori del proprio file, oppure in una posizione più avanzata dello stesso file, richiedendo un linkage esterno con lo specificatore di classe di memorizzazione extern. In tal caso, si può collegare esternamente anche una variabile indicata all'interno di una funzione o di un altro tipo di blocco, sempre con lo specificatore extern.

Le variabili che, diversamente, sono dichiarate all'interno di un blocco di qualunque genere, non sono collegabili, soprattutto nel caso delle variabili automatiche, la cui vita dipende dal blocco in cui sono contenute.

576.5   Durata di memorizzazione

Nella documentazione standard si usa spesso il termine storage duration, ovvero durata di memorizzazione, per fare riferimento al tempo di vita di una certa informazione contenuta in memoria.

Di norma si possono distinguere due casi fondamentali: ciò che viene memorizzato in un'area di memoria sempre disponibile (anche se non è detto che a ogni parte del programma sia consentito di accedervi) e ciò che si mette nella pila dei dati. Nel primo caso di parla di static storage duration, in quanto i dati stanno lì e non si muovono; nel secondo si parla di automatic storage duration, in quanto la memoria della pila viene liberata e riutilizzata in modo dinamico.

È per questa ragione che, nella dichiarazione delle variabili all'interno delle funzioni, esiste lo specificatore di classe static, a indicare una variabile che, pur essendo accessibile solo all'interno della funzione, va collocata al di fuori della pila dei dati, in modo da conservare il proprio contenuto durante le chiamate successive della stessa funzione.

576.6   «Lvalue» e «rvalue»

Nello standard del linguaggio C, il termine lvalue indica, approssimativamente, ciò che appare a sinistra di un operatore di assegnamento, nelle condizioni per cui ciò è ammissibile. Per esempio, nell'espressione seguente, la variabile x rappresenta un lvalue:

x = 3;

L'espressione seguente, invece, non è valida, perché la costante 3 non può essere un lvalue:

3 = x;  // Non è valida, perché «3» non è un «lvalue».

Il termine poteva significare, originariamente, left-value, da contrapporsi a un possibile right-value, costituito da ciò che in un'espressione si trova alla destra dell'operatore di assegnamento. Tuttavia, lo standard attuale definisce la sigla in questione un location value, ovvero un'espressione che si riferisce a un'area di memorizzazione.

Un'espressione che sia un lvalue deve anche consentire la lettura dell'area di memorizzazione a cui si riferisce; pertanto, ciò che è un lvalue deve poter essere usato alla destra di un operatore di assegnamento (in qualità di rvalue). D'altra parte, non è garantito che un lvalue individui sempre un'area di memorizzazione modificabile, dal momento che esistono variabili qualificate come costanti, alle quali si assegna un valore in fase di dichiarazione, ma successivamente non è più consentita la modifica. Per distinguere anche questa situazione, volendo escludere il caso delle costanti, si specifica che l'espressione lvalue deve anche essere modificabile.

Tabella 576.4. Operatori che richiedono un operando di tipo lvalue. In tutti i casi, escluso &lvalue, deve trattarsi di un lvalue modificabile in quel contesto.

Parola
chiave
Descrizione
&lvalue
Indirizzo di lvalue.
++lvalue
lvalue++
--lvalue
lvalue--
Incremento e decremento.
lvalue=rvalue
lvalue+=rvalue
lvalue-=rvalue
lvalue*=rvalue
lvalue%=rvalue
lvalue<<=rvalue
lvalue>>=rvalue
lvalue&=rvalue
lvalue^=rvalue
lvalue|=rvalue
lvalue~=rvalue
Assegnamenti.

Attualmente, lo standard C, al posto di rvalue, preferisce esprimere il concetto come «valore di un'espressione».

576.7   «Digraph» e «Trigraph»

In varie situazioni lo standard C consente l'utilizzo di sequenze speciali di caratteri, in sostituzione di simboli che in certi contesti potrebbero mancare, essendo invece indispensabili. In generale, quando per la scrittura dei file sorgenti si può contare su un insieme di caratteri pari a quello della codifica ASCII, queste sequenze speciali non vanno usate assolutamente, perché complicano terribilmente la lettura dei file. A ogni modo, conviene essere a conoscenza della loro esistenza e del significato che assumono.

Digraph Trigraph Carattere corrispondente
<:
??(
[
:>
??)
]
<%
??<
{
%>
??>
}
%:
??=
#
%:%:
??=??=
##

 
??!
|

 
??'
^

 
??/
\

 
??-
~

576.8   Indice dei termini trattati nel capitolo


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome c_annotazioni_sulla_terminologia.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory