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.

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top