2011-12-08 5 views
12

Il mio compilatore (gcc) mi sta dando questo avviso. Ti prego, aiutami a capire cosa vuol dire:trigraph ??/ignorato, utilizzare -trigraphs per abilitare

avvertimento: trigraph ??/ignorati, utilizzare -trigraphs per consentire

+0

'?? /' è l'equivalente di backslash, è possibile sostituire il triagrafo a "\" –

+1

A meno che non si stia scrivendo (ad esempio) il codice C su un 3270 terminal mainframe, o così via, è una "buona idea" scrivere un'occorrenza di "??" come "? \?", per la paranoia. (Alcuni caratteri, come {} [] \, sono assenti in molti set di caratteri mainframe, così come alcune tastiere non inglesi per altri sistemi.) – BRFennPocock

+1

Gli angoli polverosi di C colpiscono di nuovo ... –

risposta

16

Hai "accidentalmente" scritto un trigraph da qualche parte nel codice sorgente (il compilatore del l'avvertimento dovrebbe individuare la linea). Poiché i trigraph sono stati inventati per risolvere un problema che non entra in gioco nei sistemi moderni, in realtà non si desidera che il trigramma ??/ venga sostituito con il carattere \.

Pertanto, questo avviso dovrebbe probabilmente essere ignorato (si può dire al compilatore di stare zitto con l'aggiunta di -Wno-trigraphs dopo -Wall nella riga di comando, vedere la docs). Ma sarebbe bello mostrare il codice sorgente in modo da essere sicuri.

4

Invece di aggiungere un flag del compilatore, è sufficiente sfuggire a ogni punto interrogativo con \, ad esempio \?\?-. Questo ha aiutato nel mio caso.

+0

Il flag del compilatore è previsto per i casi dove scrivi un trigramma senza accorgertene è uno. Allora il compilatore non ti infastidirà. Se al momento della scrittura sapevi che si tratta di un trigramma non intenzionale, puoi sfuggire a ciò che hai suggerito e dimenticare le flag del compilatore. –