Mischen von breiten und schmalen Zeichenströmen: Die Anforderungen des Standards verstehen
In C ist das Mischen von cout (schmaler Zeichenausgabestrom) und wcout (breit Zeichenausgabestream) im selben Programm wirft Fragen zur Streamausrichtung auf.
Der C-Standard [27.4.1] schreibt vor, dass „Operationen an entsprechenden Wide- und Narrow-Character-Streams“ der gleichen Semantik folgen sollten wie Mischoperationen an FILEs im C-Standard. Unter Bezugnahme auf [7.19.2] im C-Standard ist es offensichtlich, dass Byte-Eingabe-/Ausgabefunktionen nicht auf Wide-orientierte Streams angewendet werden sollten und dass Wide-Zeichen-Eingabe-/Ausgabefunktionen nicht auf Byte-orientierte Streams angewendet werden sollten.
Dies legt nahe, dass das Mischen von wcout und cout innerhalb desselben Programms vermieden werden sollte. Es gibt jedoch Ausnahmen. Beispielsweise ist in Visual C 10.0 die fwide-Funktion, die für die Aufrechterhaltung der Stream-Ausrichtung verantwortlich ist, Berichten zufolge nicht implementiert. Dies bedeutet, dass die Vermischung von cout und wcout in dieser Umgebung möglicherweise ordnungsgemäß funktioniert.
Ähnlich ermöglicht ein „Fehler“ in libstdc (libstdc /11705) die Vermischung von byteorientierter und breitorientierter E/A durch Aufruf von std ::ios::sync_with_stdio(false). Es ist jedoch wichtig zu beachten, dass dieses Verhalten nicht garantiert ist und je nach Compiler und Betriebssystem variieren kann.
Obwohl der Standard daher davon abrät, cout und wcout zu mischen, ist es wichtig, sich des Potenzials bewusst zu sein Ausnahmen und um die ordnungsgemäße Handhabung der Stream-Ausrichtung bei der Arbeit mit verschiedenen Compilern oder Umgebungen sicherzustellen.
Das obige ist der detaillierte Inhalt vonKönnen Sie „cout' und „wcout' in C mischen, ohne den Standard zu verletzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!