0

ダイグラフとトリグラフを読んだ後、簡単なプログラムをテストしました。

#include <stdio.h>

int main()
{
   int a = 0;
   //??/
   ++a;
   printf("%d",a);
   return 0;
}

そして反射的に私はそうしました

g++ -std=c++11 test.c

驚いたことに、警告は出力されず、0 が出力されたので、続けて C コンパイラでコンパイルしようとしたところ、トリグラフが原因で警告が出力されました。

私の質問は、デフォルト-std=c++11で自動的にプルして警告を発しないのはなぜですか? -trigraphs(-Wall を使用せずに) 特定の C++11 機能の実装にはそれらが必要ですか? (非常に疑わしいが、尋ねる価値がある)

4

1 に答える 1

3

渡す-std=c99と、トライグラフを有効にして警告を無効にするのと同じ効果があります。

トリグラフが厳密に標準に準拠できるようにする必要があります。警告を無効にするのは驚くべきことですが、この警告は trigraph が無視されることに関するものであることに注意してください。トリグラフが使用され-stdていることに関する個別の警告 () を有効にできなかったため、警告はおそらく消えます。-Wtrigraphs

そして、それはおそらくバグと見なされるべきです。

于 2013-01-10T02:14:38.547 に答える