Trigrammi
Il set di caratteri di origine dei programmi di origine C è contenuto nel set di caratteri ASCII a 7 bit, ma è un superset del set di codice invariante ISO 646-1983. Le sequenze di trigramma consentono la scrittura di programmi C utilizzando solo il set di codice invariante ISO (International Standards Organization). I trigrammi sono sequenze di tre caratteri (introdotti da due punti interrogativi consecutivi) che il compilatore sostituisce con i relativi caratteri di punteggiatura corrispondenti. È possibile utilizzare i trigrammi in file di origine C con un set di caratteri che non contiene rappresentazioni grafiche adeguate per alcuni caratteri di punteggiatura.
C + + 17 rimuove i trigrammi dal linguaggio. Le implementazioni possono continuare a supportare trigrammi come parte del mapping definito dall'implementazione tra il file di origine fisico e il set di caratteri di origine di base, anche se lo standard invita e evitarlo. Tramite C++ 14, i trigrammi sono supportati come in C.
Visual C++ continua a supportare la sostituzione dei trigrammi, ma è disabilitata per impostazione predefinita. Per informazioni su come abilitare la sostituzione dei trigrammi, vedere /Zc:trigraphs
(Sostituzione trigrammi).
Nella tabella seguente sono illustrate le nove sequenze di trigramma. Tutte le occorrenze in un file di origine dei caratteri di punteggiatura nella prima colonna vengono sostituite con il carattere corrispondente nella seconda colonna.
Sequenze di trigramma
Trigramma | Carattere di punteggiatura. |
---|---|
??= |
# |
??( |
[ |
??/ |
\ |
??) |
] |
??' |
^ |
??< |
{ |
??! |
| |
??> |
} |
??- |
~ |
Un trigramma è sempre considerato come un singolo carattere di origine. La conversione dei trigrammi avviene nella prima fase di conversione, prima del riconoscimento dei caratteri di escape nei valori letterali stringa e nelle costanti carattere. Sono riconosciuti solo i nove trigrammi riportati nella tabella precedente. Tutte le altre sequenze di caratteri non vengono convertite.
La sequenza di escape dei caratteri, \?
, impedisce l'interpretazione errata delle sequenze di caratteri simili ai trigrammi. Per informazioni sulle sequenze di escape, vedere Sequenze di escape. Ad esempio, se si tenta di stampare la stringa What??!
con questa printf
istruzione
printf( "What??!\n" );
la stringa stampata sarà What|
poiché ??!
è una sequenza di trigramma che viene sostituita con il carattere |
. Scrivere l'istruzione come riportata di seguito per stampare correttamente la stringa:
printf( "What?\?!\n" );
In questa istruzione printf
un carattere di escape barra rovesciata prima del secondo punto interrogativo impedisce l'errata interpretazione di ??!
come trigramma.