包括windows.h导致与本地variables名称冲突

在Visual-Studio项目中,我在其中一个h文件中包含了windows.h (为了使用CaptureStackBackTrace )。 起初,我得到了一些编译器错误,因为在windows.h使用了min / max std方法和同名的macros,但是这似乎是通过#define NOMINMAX来解决的,正如我在其他SOpost中所看到的。 (我说“似乎”,因为我不能确定,直到我的整个项目再次确定)。

问题是一些局部variables名称现在打破了构build。 该行:

 int grp1; 

在类方法中,导致以下错误:

 error C2143: syntax error : missing ';' before 'constant' 

而cpp文件编译好,如果我改变variables名称grp1_

当然,我可以改变variables名,但是我有一种感觉,我做错了什么 – 是吗? 或者,这是一个包括windows.h的已知问题? 除了更改variables名称之外,还有其他更优雅的解决scheme吗?

dlg.h包含该行

 #define grp1 0x0430 

你可以通过定义WIN32_LEAN_AND_MEAN来排除它。

这在一定程度上是所有库标题的问题。 C和C ++保留名称,以_开头(标准库的实现)。 其他图书馆是自己的。 人们希望namespace ,或者如果库必须在C编译,某种命名约定,如前缀,但既不Windows或Posix甚至这样做。 (在早期,X的头文件包含一个#define String ,这不会引起其他库的问题)。

最后,没有什么好的解决办法。 你只需要等到你碰到它,然后改变你的函数的名字。 ( windows.h特别糟糕,因为其中的大部分“函数”实际上是宏,并且不服从范围。)

那么,grp1在dlgs.h中是这样定义的:

 #define grp1 0x0430 

和dlgs.h包含在windows.h中,因此冲突。

你可以在#include <windows.h>之后#undef grp1 。 不是最漂亮的网站,但是如果只包含一次windows.h,可以将这些修补程序保留在一个地方。