在同一个程序中混合宽输出流和窄输出流
在《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中文网其他相关文章!