我正在使用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();
}
但是如果我改变#include
的顺序,在Windows.h
之前包含psapi.h
,编译器会变得很糟糕,并向我抛出198个错误,令人惊讶的是(可能只有我),其中包括标识符“BOOL”未定义。为什么会发生这种情况?
2条答案
按热度按时间czq61nw11#
由于 Psapi.h 的包含树是微不足道的,我将举例说明。
一切都依赖于VStudio 2015**(社区)(v14.0.25431.01 Update 3)和***Windows Kit 8.1***(有趣的是,因为 v10 也在那里)文件(带有默认的env变量和预处理器定义):
#include <winapifamily.h>
)因此,当达到 Psapi.h(***#87***:
BOOL WINAPI EnumProcesses (...
),编译器对 BOOL 一无所知,因此会发出抱怨。就我个人而言,我认为这是 * Psapi.h * 中的一个bug,因为它不是 * 自包含的 *,但可能有一个很好的理由(我不知道)。
无论如何,如果这确实是一个bug,它就不会是 MS 的第一个bug:)
vc9ivgsu2#
要回答这个问题,我知道这是日期,但问题仍然存在今天。你需要以下:
在包含stdlib.h之后,错误就消失了。