Включение stdio при вызове WriteConsole приводит к ошибке

#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 ответа

Решение

В зависимости от платформы, stdout, вероятно, является макросом, поэтому лучше не использовать это имя. замещать

HANDLE stdout = ...

с

HANDLE out = ...

а потом

WriteConsole(out, ...

stdout определен в stdio.h, поэтому он терпит неудачу только тогда, когда этот файл включен. Но, чтобы быть в безопасности, никогда не используйте это имя для любой определенной пользователем переменной.

Стандартный вывод уже определен системой.. попробуйте изменить его на _stdout или что-то еще

Другие вопросы по тегам