Я использую 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» не определен.
Почему это происходит?
поскольку 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>
)
Итак, при достижении 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;
}
Других решений пока нет …