2

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

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

4

3 回答 3

4

这些答案让我难以接受。其他所有语言都这样做。任何支持 C++ 的链接器都可以做到这一点。这很简单:

  1. 编译所有内容,生成该模块的符号表等

  2. 链接它。

    • 任何已使用但未定义的内容都已生成undefined external错误。
    • 已定义但未使用的所有内容都应生成extraneous external definition警告。当您使用它时,将它们按源文件分组,并且仅在没有引用该模块中的符号时生成警告。
  3. 任何一个

    • 显示警告:“嘿,伙计,你并没有真正使用这个东西......所以......无论如何,伙计。干杯”,或
    • 启用上下文菜单选项,例如“删除未使用的包含”来清理它。

对于静态语言,您有一个符号表。链接时,您可以查看使用了该表中的哪些项目。您可以提供一个选项,至少突出显示所有未使用的内容。

如果你真的需要,构建这个东西,完成上述步骤,并在删除可能未使用的引用后重新构建。如果它爆炸了,把它滚回去。

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

至少,让它成为一个“有用的提示”选项。做程序员的工作不是编译器的工作。IDE 的工作是尽可能多地完成程序员的工作,并相互理解最终责任在于坐在椅子上的人。

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

于 2013-12-15T01:07:22.843 回答
3

没有已知的方法可以判断您是否不使用包含文件中的任何内容。这是一个未解决的问题,除非在完全微不足道的情况下。

考虑以下包含文件:

int x;

你怎么知道是否x被引用?包含该文件的编译输出可能链接到另一个访问x. 编译的目标文件可能不止一次以不止一种方式链接。

于 2012-09-13T02:16:11.053 回答
1

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

于 2012-09-13T03:04:27.420 回答