Il codice è pienamente aderente allo standard a qualsiasi versione dello standard C. Il meccanismo ??
si chiama trigrammi ed è stato introdotto in C per consentire un modo alternativo di stampare determinati simboli. Sembra che il programma sia stato scritto come una dimostrazione di varie sequenze di trigraph.
Torna nei giorni, molti computer e le loro tastiere erano basati su un vecchio tavolo simbolo chiamato ISO 646 che non conteneva tutti i simboli utilizzati nel linguaggio C, come ad esempio \ { } [ ]
. Ciò ha reso impossibile per i programmatori di alcuni paesi persino scrivere C, perché al loro layout di tastiera nazionale mancavano i simboli necessari. Invece di rifare le tastiere e le tabelle dei simboli, il linguaggio C è stato modificato.
Sono stati quindi introdotti i trigrafi. Oggi sono considerati una funzionalità completamente obsoleta e non è consigliabile utilizzarli. Ad esempio, GCC ti avviserà se li usi. Tuttavia, rimangono nello standard C per la retrocompatibilità e tutti i compilatori C devono supportarli.
Le sequenze trigraph esistenti (sequenze C11 5.2.1.1 trigraph):
??= #
??( [
??/ \
??) ]
??'^
??< {
??! |
??> }
??- ~
La colonna di sinistra è la sequenza trigraph e la colonna di destra è il suo significato.
Questo è il mio primo passo verso l'offuscamento. Non penso che molti programmatori di codici C siano a conoscenza di questo. – Abhineet
possibile duplicato di [significato di \ '??? - \' nel codice C++] (http://stackoverflow.com/questions/16662276/meaning-of-in-c-code) – usr2564301
Dovresti rifattorizzare il codice che assomiglia Questo. Un modo rapido sarebbe sostituire "?? =" con "?? =", Eseguire gcc -trigraph -E su di esso e quindi sostituire "?? =" Nell'output con "#" mentre si rimuovono le prime righe di prodotto da gcc. –