Mam (starszy) kod, który buduję z klangiem po raz pierwszy. Kod jest coś takiego:Czy istnieje przełącznik do wyłączania trigrafów z klang?
sprintf(buf, "%s <%s ????>", p1, p2);
Clang daje następujące ostrzeżenie (błąd z -Werror
):
test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
sprintf(buf, "%s <%s ????>", p1, p2);
^
Wyraźnie ??>
nie jest pomyślana jako trigraph, więc chcę, aby całkowicie wyłączyć trójznaków (the źródło nie używa ich celowo w dowolnym miejscu).
Próbowałem -no-trigraphs
ale to naprawdę nie jest opcja:
clang: warning: argument unused during compilation: '-no-trigraphs'
mogę wyłączyć trójznaków ostrzegawcze z -Wno-trigraphs
ale nie chcę konwersja trigraph faktycznie nastąpić w ogóle.
UWAGA: Trigraphs włączono jako niezamierzony efekt uboczny użycia -std=c89
.
Ouch! GCC ma rozsądną politykę ignorowania trigrafów, nawet w trybie ścisłej zgodności, chyba że trzymasz ręce w ogniu za pomocą '-trigraphs'. Czas się wyrwać "sed"? Lub odpowiednik. –
W rzeczywistości ścisłe tryby zgodności GCC ('-std = c89',' -std = c99', etc) włączają konwersję trigraf. – zwol
A jeśli ktoś się zastanawia, WTH to trigraf. [Tutaj jest kucyk] (http://stackoverflow.com/questions/7825055/what-does-the-c-operator-do) ... – Mysticial