C++ 如何在MSVC+;中的大型解决方案中找到重复的标题+;2005年还是2008年?

C++ 如何在MSVC+;中的大型解决方案中找到重复的标题+;2005年还是2008年?,c++,visual-c++,header,include,C++,Visual C++,Header,Include,在Visual Studio(C++)中,是否有一种方法可以轻松找到在.cpp文件中定义的重复头 我还试图找到检测这种情况的方法: A包括B包括C A包括C =>A不需要包含C 如果要检测这种情况,可以将此宏添加到每个文件的顶部。用A替换文件名 #if A_H #error "Duplicate include" #else #define A_H #endif 通常,您会用#pragma标记它们一次,或使用等效的宏保护,然后不再关心它 如果您使用的是MS编译器,则可以在每个头文件的最顶部放

在Visual Studio(C++)中,是否有一种方法可以轻松找到在.cpp文件中定义的重复头

我还试图找到检测这种情况的方法:

  • A包括B包括C
  • A包括C
  • =>A不需要包含C

如果要检测这种情况,可以将此宏添加到每个文件的顶部。用A替换文件名

#if A_H
#error "Duplicate include"
#else
#define A_H
#endif

通常,您会用#pragma标记它们一次,或使用等效的宏保护,然后不再关心它

如果您使用的是MS编译器,则可以在每个头文件的最顶部放置一条#pragma消息(IIRC,它可能是一条#pragma警告或#pragma错误),头文件的名称将显示每个编译文件中包含的每个头文件的列表

这将最适合您的头文件,因为系统文件将不包括在内


如果要查看所有包含的标题,请编辑compile选项以包含不会编译代码,但会将预处理器重定向到文件的选项,然后可以通过grep查看#include语句。请注意,这些文件会很大。

PC Lint(可能还有其他Lint工具)可能表示未使用的包含文件。

为什么需要检测此问题?如果你的标题有合适的包含保护,那就没关系了。如果您试图加快编译速度,我向您保证这不是瓶颈,删除这些不会显著加快编译速度。代码清理,我正在查看一个包含超过50个include的.cpp文件。实际上,如果.cpp需要B类和C类,它应该包括B.h和C.h-即使B.h包括C.h,原因是维护程序员可以从B.h中删除C.h,如果他可以应用pimp习惯用法。这是一个有效的更改,不应破坏a.CPP。在这种情况下,应用皮条客习惯用语的人难道不能添加include吗?这是一个聪明的解决方案。我以前从未见过这种技术。但我建议使用#警告,因为消除所有重复包含可能会导致比解决问题更糟糕的场景。