VC下如何分析头文件引入错误

问题起因:

在开发易行信息终端软件的过程中,出现一个奇怪的问题:在Win32、WM5平台及Debug、Release四种组合情况下,只有WM5-Debug情况下出现FILETIME未定义错误,查出其定义是在winbase.h中,这个文件一般是通过包含windows.h文件引入的。

但为什么没有包含这个文件呢?一开始通过手工追踪,很快就在复杂的包含关系及#define中迷失了方向。

记起在编译选项中有显示包含显示文件(/ShowInclude)的选项,试试看能否解决问题。

 

分析步骤:

主要分析步骤如下:

  • 把/ShowInclude选项打开后,针对出现问题的文件进行单独编译,在编译输出中列出所有相关包含文件(可难会有上千个)。
  • 输出次序就是包含文件的引及次序,文件的包含关系在输出中以空格缩进表示。
  • 把无问题的编译输出与存在问题的编译输出进行差异化比较,除了正常差异外(如因DEBUG而额外引入的文件),针对出现差异的头文件,根据包含关系找到其引入文件。
  • 打开引入文件,分析其#define预处理设定,分析为何出现包含差异。
  • 根据原因进行故障排除。

 

具体解决情况:

在我的项目中,因为在从wxThreadboost::thread迁移过程中,文件中仍然同时包含了两个库中的头文件,由于wxThread的头文件在前,其中的宏定义影响了boost::thread正确引入windows.h,从而出现前述的错误,调整两个头文件的包含次序后,问题解决。 在四种编译组合下均正常通过。

 

posted @ 2008-12-30 09:43  easyti  阅读(521)  评论(0编辑  收藏  举报