同じプログラム内でのワイド出力ストリームとナロー出力ストリームの混合
「C Cookbook」では、cout と wcout を混合することが記載されています。同じプログラムを実行すべきではありません。このコメントは、C および C 標準ではストリームには方向があることが規定されており、この方向がストリームに設定された後は、その方向と互換性のない操作を混在させるべきではないという事実に由来しています。
これは実際には意味するのでしょうか?
cout または wcout が初めて呼び出されたときに、stdout の方向が設定されます。 cout の場合、stdout はバイト指向のストリームになり、wcout の場合、stdout はワイド指向のストリームになります。 C 標準 [27.4.1] および C 標準 [7.19.2] に従って、ストリームの方向が設定された後は、そのストリームの方向と互換性のない関数を呼び出すべきではありません。
ルールの例外
ただし、すべてのコンパイラーがこの標準に厳密に従っているわけではないことに注意することが重要です。たとえば、Visual C 10.0 では、fwide 関数 (ストリームの方向を設定するために使用される) は実装されていません。したがって、Visual C では、 cout と wcout の混合が許可されています。
同様に、GCC の初期バージョンでは、修正されたバグにより、std を呼び出すことで同じプログラム内で cout と wcout を呼び出すことができました。 ::ios::sync_with_stdio(false);
ただし、これらはルールの例外であることに留意することが重要です。一般に、同じプログラム内にワイド出力ストリームとナロー出力ストリームを混在させることはお勧めできません。予期しない動作や未定義の結果が生じる可能性があります。
以上が同じ C プログラム内で cout と wcout を混在させないほうがよいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。