2012-06-10 187 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或別的東西

相關問題