发现在windows.h中定义的内容是创建语法错误

时间:2016-08-21 13:51:14

标签: c++ visual-c++

我在Visual Studio 2015中开始研究C ++应用程序的GUI方面,包括<windows.h>我对其他具有语法问题的文件产生了极其神秘的错误。我发现包含该头文件是问题的根源。

我在网上浏览了一下,发现了NOMINMAX,但是定义并没有解决问题。我使用numeric_limits<int>::min() / max()::infinity()一个使用浮点数,因此NOMINMAX将解决这个小问题,但没有解决这些语法错误的主要问题作为最小/最大问题发生的编译器错误非常具体。

将标题移到最底部似乎暂时解决了它,然而我对此并不满意,因为这意味着我的代码中有一个潜在的定时炸弹,我不确定哪里。现在它的5k LOC但我更愿意处理它而不是达到50k并以一种迫使我处理它的方式遇到这个问题。

我有哪些技巧可以找出错误发生的位置?我可以在预处理后转储文件吗?通过并评论所有内容会特别痛苦......但我不知道我是否有选择权。我对位置有了一个大概的看法,但它很遗憾地出现在非常突出的包含中,所以试图隔离它所需的评论量并不太令人愉快。

是否有工具或某种方法可以帮助我解决这个问题?或者我不得不长时间和肮脏的方式去做?

注意:我也尝试过WIN32_LEAN_AND_MEANNOMINMAXVC_EXTRALEAN尝试解决此问题,但这不起作用。

编辑:我已经尝试评论/试图从指示的行找出导致它的原因但是有太多的文件/ LOC导致的混乱(由于这不幸发生在经常使用的文件上)意味着数量快速跟踪这一过程的工作变成了一场噩梦,因此我在这里发帖寻找关于如何识别这个问题的任何启发式方法。当我不包含头文件时,它也会很好地编译并使用发生这些语法错误的所有函数,因此代码本身不会被破坏,因为应用程序实际上使用它们并运行得很好。

1 个答案:

答案 0 :(得分:0)

我的解决方案来自于决定一次一个地手动包含windows.h包含文件,以查看导致它的原因。这最终导致我发现wingdi.h引起了问题,#define NOGDI解决了这个问题。进一步的谷歌搜索产生了那里的一大块名字可能与类名碰撞,我至少证实了其中一个。