在同一程序中混合寬輸出流和窄輸出流
在《C Cookbook》中,提到在不應該執行相同的程序。這個評論源於這樣一個事實: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 中,由於修復了一個bug,可以透過呼叫std 在同一個程式中呼叫cout 和wcout ::ios::sync_with_stdio(假);
但是,請務必記住,這些都是規則的例外。一般來說,不建議在同一程式中混合寬輸出流和窄輸出流,因為這可能會導致意外的行為或未定義的結果。
以上是為什麼應避免在同一個 C 程式中混合使用 cout 和 wcout?的詳細內容。更多資訊請關注PHP中文網其他相關文章!