Ricerca…


Osservazioni

Il termine letterale è comunemente usato per descrivere una sequenza di caratteri in un codice C che designa un valore costante come un numero (es. 0 ) o una stringa (es. "C" ). Strettamente parlando, lo standard usa la costante di termine per le costanti intere, le costanti fluttuanti, le costanti di enumerazione e le costanti di carattere, riservando il termine 'letterale' per i letterali stringa, ma questo non è un uso comune.

I letterali possono avere prefissi o suffissi (ma non entrambi) che sono caratteri extra che possono iniziare o terminare un letterale per cambiare il suo tipo predefinito o la sua rappresentazione.

Letterali interi

I valori letterali interi vengono utilizzati per fornire valori interi. Sono supportate tre basi numeriche, indicate dai prefissi:

Base Prefisso Esempio
Decimale Nessuna 5
Octal 0 0345
esadecimale 0x o 0X 0x12AB , 0X12AB , 0x12ab , 0x12Ab

Nota che questo scritto non include alcun segno, quindi i letterali interi sono sempre positivi. Qualcosa come -1 è trattato come un'espressione che ha un intero letterale ( 1 ) che viene annullato con un -

Il tipo di un intero decimale letterale è il primo tipo di dati che può adattarsi al valore di int e long . Dal momento che C99, long long è supportato anche per letterali molto grandi.

Il tipo di un letterale intero ottale o esadecimale è il primo tipo di dati che può adattarsi al valore di int , unsigned , long e unsigned long . Dal momento che C99, long long e unsigned long long sono supportati anche per letterali molto grandi.

Utilizzando vari suffissi, il tipo predefinito di un valore letterale può essere modificato.

Suffisso Spiegazione
L , l long int
LL , ll (dal C99) long long int
U , u unsigned

I suffissi U e L / LL possono essere combinati in qualsiasi ordine e caso. È un errore duplicare i suffissi (ad esempio fornire due suffissi U ) anche se hanno casi diversi.

Stringhe letterali

I valori letterali stringa vengono utilizzati per specificare matrici di caratteri. Sono sequenze di caratteri racchiusi tra virgolette (ad esempio "abcd" e hanno il tipo char* ).

Il prefisso L rende letterale un ampio array di caratteri, di tipo wchar_t* . Ad esempio, L"abcd" .

Dal momento che C11, ci sono altri prefissi di codifica, simili a L :

prefisso tipo di base codifica
nessuna char dipendente dalla piattaforma
L wchar_t dipendente dalla piattaforma
u8 char UTF-8
u char16_t di solito UTF-16
U char32_t di solito UTF-32

Per gli ultimi due, può essere interrogato con macro test di funzionalità se la codifica è effettivamente la codifica UTF corrispondente.

Letterali in virgola mobile

I letterali in virgola mobile vengono utilizzati per rappresentare i numeri reali firmati. I seguenti suffissi possono essere usati per specificare il tipo di un letterale:

Suffisso genere Esempi
nessuna double 3.1415926 -3E6
f , F float 3.1415926f 2.1E-6F
l , L long double 3.1415926L 1E126L

Per utilizzare questi suffissi, il letterale deve essere un letterale in virgola mobile. Ad esempio, 3f è un errore, poiché 3 è un valore letterale intero, mentre 3.f o 3.0f sono corretti. Per il long double , la raccomandazione è di usare sempre il capitale L per motivi di leggibilità.

Caratteri letterali

I caratteri letterali sono un tipo speciale di letterali interi che vengono utilizzati per rappresentare un carattere. Sono racchiusi tra virgolette singole, ad es. 'a' e hanno il tipo int . Il valore del letterale è un valore intero in base al set di caratteri della macchina. Non consentono i suffissi.

Il prefisso L prima di un carattere letterale lo rende un ampio carattere di tipo wchar_t . Allo stesso modo, dal momento che i prefissi C11 u e U rendono ampi caratteri rispettivamente di tipo char16_t e char32_t .

Quando si intende rappresentare determinati caratteri speciali, come un carattere che non è in stampa, vengono utilizzate le sequenze di escape. Le sequenze di escape usano una sequenza di caratteri che vengono tradotti in un altro personaggio. Tutte le sequenze di escape consistono in due o più caratteri, il primo dei quali è una barra rovesciata \ . I caratteri che seguono immediatamente il backslash determinano quale carattere letterale viene interpretata come la sequenza.

Sequenza di fuga Carattere Rappresentato
\b Backspace
\f Modulo di alimentazione
\n Avanzamento riga (nuova riga)
\r Ritorno a capo
\t Scheda orizzontale
\v Scheda verticale
\\ Barra rovesciata
\' Virgoletta singola
\" Doppia virgoletta
\? Punto interrogativo
\nnn Valore ottale
\xnn ... Valore esadecimale
C89
Sequenza di fuga Carattere Rappresentato
\a Avviso (segnale acustico, campanello)
C99
Sequenza di fuga Carattere Rappresentato
\unnnn Nome del personaggio universale
\Unnnnnnnn Nome del personaggio universale

Un nome di carattere universale è un punto di codice Unicode. Un nome di carattere universale può essere associato a più di un carattere. Le cifre n sono interpretate come cifre esadecimali. A seconda della codifica UTF in uso, una sequenza di nomi carattere universale può comportare un punto di codice costituito da più caratteri, anziché un singolo char carattere normale.

Quando si utilizza la sequenza di escape dell'alimentazione di riga in I / O in modalità testo, viene convertita nella sequenza di byte o riga di byte di nuova riga specifica del sistema operativo.

La sequenza di escape del punto interrogativo viene utilizzata per evitare i trigraph . Ad esempio, ??/ è compilato come il trigraph che rappresenta un carattere backslash '\' , ma usando ?\?/ Risulterebbe nella stringa "??/" .

Ci possono essere uno, due o tre numeri ottali n nella sequenza di escape del valore ottale.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow