Ctype.h: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Xqbot (discussione | contributi)
m Bot: Aggiungo: uk:Ctype.h
Nessun oggetto della modifica
 
(20 versioni intermedie di 20 utenti non mostrate)
Riga 1:
{{Libreria_standard_C}}
{{titolo errato|titolo=ctype.hminuscolo}}
 
'''ctype.h''' è l'[[header file]] che, all'interno della [[libreria standard del C]], dichiara funzioni utilizzate per la classificazione dei caratteri.
 
== Storia ==
 
I primi programmatori in linguaggio [[C (linguaggio)|linguaggio C]] su [[Unix]] cominciarono rapidamente a sviluppare dei controlli per classificare i caratteri tra diversi tipi: ''numero'', ''lettera'',''carattere di controllo'', oppure sottoinsiemi quali ''lettera maiuscolaMAIUSCOLA'' o ''lettera minuscola'', per concludere con insiemi più vasti quali ''carattere stampabile''. Per eseguire queste classificazioni, inizialmente furono ideati dei test molto semplici; il seguente esempio mostra come identificare se il carattere contenuto nella variabile <code>c</code> è una lettera:
 
if ('A' <= c && c <= 'Z' || 'a' <= c && c <= 'z')
Line 16 ⟶ 15:
A differenza di quanto riportato sopra, le funzioni di classificazione di caratteri non sono scritte in forma di test comparativi. Nella maggior parte delle librerie C, infatti, esse sono implementate con delle ricerche in tabelle [[allocazione statica della memoria|allocate staticamente]].
 
Ad esempio, la tabella può essere implementata con un [[array]] di 256 [[Numero intero (informatica)|interi]] da 8 [[bit]] ciascuno, organizzati come [[bitfield]], dove a ciascun bit corrisponde una particolare proprietà del carattere: ''numero'', ''lettera'' e così via. Se il [[bit meno significativo]] del numero intero corrispondesse alla proprietà ''numero'', il codice per la funzione (o, meglio, la macro) <code>isdigit()</code> potrebbe essere scritto semplicemente come:
 
#define isdigit(x) (TABLE[x] & 1)
Line 24 ⟶ 23:
#define isdigit(x) ((x) >= '0' && (x) <= '9')
 
Questa definizione potrebbe causare problemi se la determinazione del valore di <code>x</code> avesse degli effetti collaterali, come in <code>isdigit(x++)</code> oppure <code>isdigit(esegui_qualcosa())</code>. In questo caso l'espressione sarebbe valutata due volte, cosa non immediatamente evidente al programmatore distratto. Per questo, il metodo della tabella è utilizzato più diffusamente (vedere anche il messaggio di [[Linus Torvalds]] nella [[mailing list]] del kernel Linux, in basso alla pagina).
 
== Funzioni ==
Line 30 ⟶ 29:
Il file <code>ctype.h</code> contiene una dozzina di funzioni di classificazione dei caratteri: esse sono tutte dipendenti dalle impostazioni locali del sistema, tranne <code>isdigit()</code>. Inoltre, le funzioni possono essere divise in due sottogruppi: quelle utilizzate per la verifica delle proprietà dei caratteri e quelle per la conversione degli stessi.
 
{| class="wikitable"
{| {{prettytable}}
|- bgcolor=#e9e9e9
!Nome || Descrizione
|- bgcolor=#f2f2f2
|colspan=2 align=center|<bigspan style="font-size: 120%;">Funzioni per la verifica delle proprietà dei caratteri</bigspan><br>RitornanoRestituiscono zero se falso o un numero diverso da zero se vero.
|-
|<code>isalnum</code> || Controlla che il carattere passato sia ''alfanumerico''.
Line 60 ⟶ 59:
|<code>isxdigit</code> || Controlla che il carattere passato sia ''esadecimale'', cioè sia compreso in 0-9, oppure a-f, oppure A-F.
|- bgcolor=#f2f2f2
|colspan=2 align=center|<bigspan style="font-size: 120%;">Funzioni per la conversione dei caratteri</bigspan><br>Ritornano il carattere convertito.
|-
|<code>tolower</code> || Converte il carattere passato nel suo corrispondente minuscolo, se applicabile.
Line 67 ⟶ 66:
|}
 
La versione 3 della [[Single UNIX Specification|Single Unix Specification]] aggiunge ulteriori funzionalità aggiuntive:
{| class="wikitable"
{| {{prettytable}}
|- bgcolor=#e9e9e9
!Nome || Descrizione
Line 91 ⟶ 90:
 
== Collegamenti esterni ==
*{{en}} [httphttps://groups.google.com/groups?selm=15FWF-45f-17%40gated-at.bofh.it Spiegazione del metodo della tabella] da parte di [[Linus Torvalds]]
 
[[Categoria: Libreria standard del C]]
 
[[Categoria: Libreria standard del C]]
[[en:Ctype.h]]
[[es:Ctype.h]]
[[ru:Ctype.h]]
[[uk:Ctype.h]]