假设我有一个*.cpp/.h/.hpp*
文件, #include <map>
但我没有使用map
头文件定义或引用的任何内容。我希望 VS 向我发出警告或我不使用我包含的文件中的数据的东西。
那么 Visual Studio 2012(在其任何版本中)是否显示未使用的包含?(所需答案应包括简单的 - 是/否)
假设我有一个*.cpp/.h/.hpp*
文件, #include <map>
但我没有使用map
头文件定义或引用的任何内容。我希望 VS 向我发出警告或我不使用我包含的文件中的数据的东西。
那么 Visual Studio 2012(在其任何版本中)是否显示未使用的包含?(所需答案应包括简单的 - 是/否)
这些答案让我难以接受。其他所有语言都这样做。任何支持 C++ 的链接器都可以做到这一点。这很简单:
编译所有内容,生成该模块的符号表等
链接它。
undefined external
错误。extraneous external definition
警告。当您使用它时,将它们按源文件分组,并且仅在没有引用该模块中的符号时生成警告。任何一个
对于静态语言,您有一个符号表。链接时,您可以查看使用了该表中的哪些项目。您可以提供一个选项,至少突出显示所有未使用的内容。
如果你真的需要,构建这个东西,完成上述步骤,并在删除可能未使用的引用后重新构建。如果它爆炸了,把它滚回去。
有一百种方法可以解决这个问题。显然没有一个 IDE 可以做到这一点,这一事实令人惊讶。
至少,让它成为一个“有用的提示”选项。做程序员的工作不是编译器的工作。IDE 的工作是尽可能多地完成程序员的工作,并相互理解最终责任在于坐在椅子上的人。
源代码我曾经以编写 C 编译器为生。
没有已知的方法可以判断您是否不使用包含文件中的任何内容。这是一个未解决的问题,除非在完全微不足道的情况下。
考虑以下包含文件:
int x;
你怎么知道是否x
被引用?包含该文件的编译输出可能链接到另一个访问x
. 编译的目标文件可能不止一次以不止一种方式链接。
判断包含文件是否不必要的最好方法是将其注释掉或完全删除它,然后查看代码是否仍然可以编译。这是一个易于自动化的过程。