Frage

Ich habe einen (alten) Code, den ich zum ersten Mal mit Clang erstelle.Der Code ist ungefähr so:

sprintf(buf, "%s <%s ????>", p1, p2);

Clang gibt die folgende Warnung aus (Fehler mit -Werror):

test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
    sprintf(buf, "%s <%s ????>", p1, p2);
                           ^

Natürlich ist der ??> nicht als Trigraph gedacht, daher möchte ich Trigraphs vollständig deaktivieren (die Quelle verwendet sie nicht absichtlich irgendwo).

Ich habe -no-trigraphs ausprobiert, aber das ist nicht wirklich eine Option:

clang: warning: argument unused during compilation: '-no-trigraphs'

Ich kann die Trigraph-Warnung mit -Wno-trigraphs deaktivieren, möchte aber nicht, dass die Trigraph-Konvertierung überhaupt stattfindet.

HINWEIS: Trigraphen wurden als unbeabsichtigter Nebeneffekt bei der Verwendung von -std=c89 aktiviert.

War es hilfreich?

Lösung

Versuchen Sie, den Gnu * -Modus zu verwenden - "Trigraphs sind im Gnu * -Modus standardmäßig deaktiviert. Sie können mit der Option -trigraphs aktiviert werden."(Weitere Unterschiede finden Sie unter http://clang.llvm.org/docs/UsersManual.html#c_modes und Befehlszeilenschalter)

Andere Tipps

Ich konnte keinen offensichtlichen Weg finden, um Trigraphen zu deaktivieren (anstelle der Trigraphenwarnung).Der wahrscheinlich einfachste Weg, diesen Code zu reparieren, besteht darin, ihn zu ändern in:

sprintf(buf, "%s <%s ????"">", p1, p2);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top