Heim >Backend-Entwicklung >C++ >Warum sollten Sie es vermeiden, cout und wcout im selben C-Programm zu mischen?
Mischen von breiten und schmalen Ausgabeströmen im selben Programm
Im „C Cookbook“ wird erwähnt, dass cout und wcout gemischt werden Das gleiche Programm sollte nicht durchgeführt werden. Dieser Kommentar ergibt sich aus der Tatsache, dass C- und C-Standards vorschreiben, dass Streams eine Ausrichtung haben, und sobald diese Ausrichtung für einen Stream festgelegt ist, sollten Sie keine Vorgänge mischen, die mit der Ausrichtung nicht kompatibel sind.
Was Bedeutet das in der Praxis?
Wenn cout oder wcout zum ersten Mal aufgerufen wird, wird die Ausrichtung für stdout festgelegt. Im Fall von cout wird stdout zu einem byteorientierten Stream, und im Fall von wcout wird stdout zu einem Wide-orientierten Stream. Gemäß dem C-Standard [27.4.1] und dem C-Standard [7.19.2] sollten Sie, sobald die Ausrichtung eines Streams festgelegt ist, keine Funktion aufrufen, die nicht mit der Ausrichtung dieses Streams kompatibel ist.
Ausnahmen von der Regel
Es ist jedoch wichtig zu beachten, dass nicht alle Compiler diesen Standard strikt befolgen. Beispielsweise ist in Visual C 10.0 die Funktion fwide (die zum Festlegen der Ausrichtung eines Streams verwendet wird) nicht implementiert. Daher ist in Visual C das Mischen von cout und wcout zulässig.
In ähnlicher Weise war es in früheren Versionen von GCC aufgrund eines behobenen Fehlers möglich, cout und wcout im selben Programm aufzurufen, indem std aufgerufen wurde ::ios::sync_with_stdio(false); zu Beginn des Programms.
Es ist jedoch wichtig zu bedenken, dass es sich hierbei um Ausnahmen von der Regel handelt. Im Allgemeinen wird nicht empfohlen, breite und schmale Ausgabeströme im selben Programm zu mischen, da dies zu unerwartetem Verhalten oder undefinierten Ergebnissen führen kann.
Das obige ist der detaillierte Inhalt vonWarum sollten Sie es vermeiden, cout und wcout im selben C-Programm zu mischen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!