C'è un interruttore per disabilitare i trigrafi con clang?
Domanda
Ho del codice (legacy) che sto creando con clang per la prima volta.Il codice è qualcosa del tipo:
sprintf(buf, "%s <%s ????>", p1, p2);
Clang dà il seguente avviso (errore con -Werror
):
test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
sprintf(buf, "%s <%s ????>", p1, p2);
^
Chiaramente il ??>
non è inteso come un trigrafo, quindi desidero disabilitare completamente i trigrafi (il sorgente non li usa intenzionalmente da nessuna parte).
Ho provato -no-trigraphs
ma non è proprio un'opzione:
clang: warning: argument unused during compilation: '-no-trigraphs'
Posso disattivare l'avviso trigraph con -Wno-trigraphs
ma non voglio che la conversione trigraph avvenga effettivamente.
NOTA: i trigrafi sono stati abilitati come effetto collaterale non intenzionale dell'utilizzo di -std=c89
.
Soluzione
Prova a usare la modalità gnu * - "Trigraphs è disattivato per impostazione predefinita nelle modalità gnu *; possono essere abilitati dall'opzione -trigraphs."(vedi http://clang.llvm.org/docs/UsersManual.html#c_modes per altre differenzee l'opzione della riga di comando)
Altri suggerimenti
Non riuscivo a vedere un modo ovvio per disabilitare i trigrafi (piuttosto che l'avvertimento dei trigrafi).Probabilmente il modo più semplice per correggere questo codice è cambiarlo in:
sprintf(buf, "%s <%s ????"">", p1, p2);