Почему изменение порядка включения psapi.h приводит к ошибкам компиляции? (Indentifier BOOL не определен)

Я использую Visual Studio Community 2017 для написания кода на С ++. Когда я запускаю следующий код, все работает нормально.

#include "pch.h"#include<Windows.h>
#include<Psapi.h>
#include <iostream>
#include <conio.h>

int main()
{

std::cout << "Really!! How do you do it?";
_getch();
}

Но если я изменю порядок #includeс помощью psapi.h до Windows.h, компилятор выходит из себя и выдает мне 198 ошибок, что удивительно (возможно, только для меня) включает Идентификатор «BOOL» не определен.
Почему это происходит?

0

Решение

поскольку Psapi.hВключать дерево тривиально, я приведу пример.
Все зависит от VStudio 2015 (Сообщество) (v14.0.25431.01 Обновление 3) а также Windows Kits 8.1 (? смешно, потому что v10 тоже есть) файлы (с заданными по умолчанию env vars и определениями препроцессора):

  • BOOL определяется в minwindef.h (# 157: typedef int BOOL;)

  • Psapi.h включает только один файл (# 27: #include <winapifamily.h>)

    • winapifamily.h не содержит никаких других файлов

Итак, при достижении Psapi.h (# 87: BOOL WINAPI EnumProcesses (...) компилятор ничего не знает о BOOL, так что жалуется.

Windows.h включает в себя minwindef.h (косвенно, через windef.h), и именно поэтому он работает, когда вы включаете его раньше Psapi.h.

Лично я думаю, что это ошибка в Psapi.h, так как это не самодостаточный, но для этого может быть веская причина (о которой я не знаю).
Во всяком случае, если это действительно ошибка, это не будет МИЗ1улица один 🙂

#include <Windows.h>
#include <WinSock2.h>

// main present just for rigorosity's sake
int main() {
return 0;
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]