假设我有一个*.cpp/.h/.hpp*
文件,其中包含#include <map>
,但我没有使用map
头文件定义或引用的任何内容。我希望VS给我一个警告,或者我不使用我收录的文件中的数据。
Visual Studio 2012(在其任何版本中)显示未使用的包含吗? (答案要求应包括简单 - 是/否)
答案 0 :(得分:4)
这些答案让我感到困惑。每种其他语言都这样做。任何能够使用C ++的链接器都能做到。这很简单:
编译所有内容,除其他外,为该模块生成符号表
链接。
undefined external
错误。 extraneous external definition
警告。当你在它时,按源文件对这些进行分组,并且只有在引用该模块中的符号时才生成警告。
对于静态语言,您有一个符号表。 链接时,您可以看到该表中的哪些项目被使用。 您可以提供至少突出显示未使用的所有内容的选项。
如果您真的需要构建该东西,请完成上述步骤,并在删除可能未使用的引用后重建。如果爆炸,请将其翻滚。
有一百种方法可以解决这个问题。事实上,没有一个IDE显然这样做是令人惊讶的。
至少,请将其作为“有用的提示”选项。执行程序员的工作不是编译器的工作。 IDE的工作就是让尽可能多的程序员工作,相互理解,最终的责任在于人在主席。
来源我曾经以编写C编译器为生。
答案 1 :(得分:3)
没有已知方法可以判断您是否不使用包含文件中的任何内容。除了完全无关紧要的情况外,这是一个未解决的问题。
考虑以下包含文件:
int x;
如何判断x
是否被引用?包含该文件的已编译输出可能链接到访问x
的另一个对象文件。编译的目标文件可能多次以多种方式链接。
答案 2 :(得分:1)
判断包含文件是否不必要的最佳方法是将其注释掉或完全删除它,并查看代码是否仍然编译。这是一个易于自动化的过程。