包括stdio在调用WriteConsole时导致错误

时间:2012-06-10 10:49:34

标签: c++ winapi console mingw

#include <stdio.h>
#include <windows.h>

using namespace std;

int main() {
  char s[] = "Hello\n";
  HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
  unsigned long cChars;
  WriteConsole(stdout, s, lstrlen(s), &cChars, NULL);
}

结果:error: declaration of '_iob' as array of references

但是当我评论stdio.h时,它编译好了。这有什么不对?

编译器是MinGW。

2 个答案:

答案 0 :(得分:7)

根据平台的不同,stdout可能是一个宏,所以最好不要使用该名称。取代

HANDLE stdout = ...

HANDLE out = ...

然后

WriteConsole(out, ...

stdout在stdio.h中定义,这就是为什么它只在包含这个文件时才会失败。但为了安全起见,永远不要将该名称用于任何自定义变量。

答案 1 :(得分:1)

stdout已由系统定义..尝试将其更改为_stdout或其他