Visual Studio 2012(在其任何版本中)是否显示未使用的包含?

时间:2012-09-13 02:14:19

标签: c++ refactoring visual-studio-2012

假设我有一个*.cpp/.h/.hpp*文件,其中包含#include <map>,但我没有使用map头文件定义或引用的任何内容。我希望VS给我一个警告,或者我不使用我收录的文件中的数据。

Visual Studio 2012(在其任何版本中)显示未使用的包含吗? (答案要求应包括简单 - 是/否)

3 个答案:

答案 0 :(得分:4)

这些答案让我感到困惑。每种其他语言都这样做。任何能够使用C ++的链接器都能做到。这很简单:

  1. 编译所有内容,除其他外,为该模块生成符号表

  2. 链接。

    • 任何已使用但未定义的内容都会产生undefined external错误。
    • 定义但未使用的所有内容都应生成extraneous external definition警告。当你在它时,按源文件对这些进行分组,并且只有在引用该模块中的符号时才生成警告。
    • 表示警告:“嘿,老兄,你真的不是在用这个东西......所以......不管怎样,男人。干杯”,或者
    • 启用上下文菜单选项,例如“删除未使用的包含”,以清除它。
  3. 对于静态语言,您有一个符号表。 链接时,您可以看到该表中的哪些项目被使用。 您可以提供至少突出显示未使用的所有内容的选项。

    如果您真的需要构建该东西,请完成上述步骤,并在删除可能未使用的引用后重建。如果爆炸,请将其翻滚。

    有一百种方法可以解决这个问题。事实上,没有一个IDE显然这样做是令人惊讶的。

    至少,请将其作为“有用的提示”选项。执行程序员的工作不是编译器的工作。 IDE的工作就是让尽可能多的程序员工作,相互理解,最终的责任在于人在主席。

    来源我曾经以编写C编译器为生。

答案 1 :(得分:3)

没有已知方法可以判断您是否不使用包含文件中的任何内容。除了完全无关紧要的情况外,这是一个未解决的问题。

考虑以下包含文件:

int x;

如何判断x是否被引用?包含该文件的已编译输出可能链接到访问x的另一个对象文件。编译的目标文件可能多次以多种方式链接。

答案 2 :(得分:1)

判断包含文件是否不必要的最佳方法是将其注释掉或完全删除它,并查看代码是否仍然编译。这是一个易于自动化的过程。