12

初めてclangで構築している(レガシー)コードがいくつかあります。コードは次のようなものです。

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

Clang は次の警告を表示します ( のエラー-Werror):

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

明らかに??>トライグラフとして意図されたものではないので、トライグラフを完全に無効にしたいと思います (ソースは意図的にトライグラフを使用していません)。

私は試し-no-trigraphsましたが、それは実際にはオプションではありません:

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

トリグラフの警告をオフにすることはできます-Wno-trigraphsが、トリグラフの変換が実際に行われることはまったくありません。

注: Trigraph は、使用の意図しない副作用として有効になりました-std=c89

4

2 に答える 2

8

gnu* モードを使用してみてください - 「gnu* モードでは、トリグラフはデフォルトでオフになっています。-trigraphs オプションで有効にすることができます。」(その他の違いとコマンド ライン スイッチについては、 http://clang.llvm.org/docs/UsersManual.html#c_modesを参照してください)

于 2012-02-22T00:06:19.450 に答える
4

(トライグラフの警告ではなく) トライグラフを無効にする明確な方法がわかりませんでした。おそらく、このコードを修正する最も簡単な方法は、次のように変更することです。

sprintf(buf, "%s <%s ????"">", p1, p2);
于 2012-02-21T23:59:36.817 に答える