我正在使用 Visual Studio Community 2017 来编写 C++ 代码。当我运行以下代码时,一切正常。
#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();
}
Run Code Online (Sandbox Code Playgroud)
#include但是,如果我通过包含psapi.hbefore来更改 s 的顺序Windows.h,编译器就会变得很糟糕并向我抛出 198 个错误,其中令人惊讶的是(也许仅对我来说)包括Identifier "BOOL" is undefined。为什么会发生这种情况?
由于Psapi.h的包含树很简单,因此我将举例说明。
一切都依赖于VStudio 2015(社区)(v14.0.25431.01 Update 3)和Windows Kits 8.1(?有趣,因为v10也在那里)文件(具有默认环境变量和预处理器定义):
BOOL在minwindef.h中定义( #typedef int BOOL; 157 :)
Psapi.h仅包含一个文件 ( # 27 :)#include <winapifamily.h>
因此,当到达Psapi.h ( #87 :)时BOOL WINAPI EnumProcesses (...,编译器不知道有关BOOL 的任何信息,因此它会抱怨。
Windows.h 包含 minwindef.h(间接地,通过windef.h),这就是为什么当您在Psapi.h之前包含它时它会起作用。
就我个人而言,我认为这是Psapi.h中的一个错误,因为它不是独立的,但可能有一个很好的理由(我不知道)。
无论如何,如果这确实是一个错误,那它就不会是MS的第一个错误了:)
#include <Windows.h>
#include <WinSock2.h>
// main present just for rigorosity's sake
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |