C中标准输出的方向是什么

时间:2013-11-07 11:15:38

标签: c

GNU C manual说:

  

能够使用相同的流进行广泛和正常的操作   有限制:流可以用于广泛的操作或   用于正常操作。

     

[...]

     

重要的是不要混用宽而不宽的用途   流上的操作。没有发布诊断信息。该   应用程序行为将是奇怪的或应用程序将   只是崩溃。 fwide函数可以帮助避免这种情况。

我已经尝试过vs2012,printf紧跟着wprintf,简单的程序正常运行。

然后我的问题是,手册是什么意思?何时以及为什么我们应该使用fwide函数?

1 个答案:

答案 0 :(得分:0)

manual更全面地说:

  

能够使用相同的流进行广泛和正常的操作   有限制:流可以用于广泛的操作或   用于正常操作。一旦决定就没有办法回来了。只有一个   调用freopen或freopen64可以重置方向。该   取向可以通过三种方式决定:

     
      
  • 如果使用了任何普通字符函数(包括fread和fwrite函数),则该流被标记为不是面向广的。
  •   
  • 如果使用任何宽字符函数,则将流标记为面向对象。
  •   
  • fwide功能可用于设置方向。
  •   
     

重要的是不要混淆使用宽而不宽的操作   在一条小溪上。没有发布诊断信息。应用程序行为   将只是奇怪或应用程序将崩溃。范围广泛   功能可以帮助避免这种情况。

请注意,Microsoft文档说他们的fwide()未被实现" (它是一个无操作的)并且它不符合标准。"

我对所有这些的解读是,使用glibc的程序不得在单个流上使用窄字符和宽字符函数,而无需重新打开它。也许在微软平台上没有这样的限制;也许甚至其他libc实现也更灵活。