2012-06-10 176 views
3
#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); 
} 

结果调用WriteConsole结果时:error: declaration of '_iob' as array of references包括标准输入输出错误

但是当我注释掉stdio.h,它编译OK。这里有什么问题?

编译器是MinGW。

+0

它是否给文件名行号与错误一起?改变#include的顺序是否改变了什么? –

+0

是的,错误指向标准输出,这是问题,它是保留名称。 – rsk82

回答

7

根据平台的不同,标准输出可能是一个宏,所以最好不要使用该名称。更换

HANDLE stdout = ... 

HANDLE out = ... 

然后

WriteConsole(out, ... 

的stdout在stdio.h中定义,这就是为什么它不能仅当包含该文件。但为了安全起见,请勿将该名称用于任何自定义变量。

+0

+1头文件有这个:'#define stdout(&_iob [STDOUT_FILENO])' –

+0

它不是“取决于平台”。 *标准*表示这是一个宏。 – Fanael

1

标准输出已经被系统定义..尝试将其更改为_stdout或别的东西

相关问题