c ++头文件和实现

时间:2018-04-19 22:38:07

标签: c++ visual-studio-2015

我试图了解IDE(我使用的是Visual Studio)如何知道在何处找到头文件声明的实现。

假设我有2个cpp文件和1个头文件:

  • main.cpp,包含main()功能并包含person.h
  • person.h,包含一些在person.cpp
  • 中实现的类声明
  • person.cpp,包含person.h声明的实现,还定义了person.h

所以我的理解是main.cppperson.cpp知道在哪里找到函数声明,但person.h必须在某些.cpp文件中搜索这些实现。

现在,Visual Studio如何跟踪这一点?每次创建新的头文件时,VS是否需要解析项目中的每个.cpp文件以查找声明的实现位置?头文件没有任何要搜索的.cpp个文件的声明,但它找到了它们! Visual Studio是否扫描项目中的每个.cpp文件?

那么,在一个包含数百或数千个.cpp文件的大型项目中会发生什么?这似乎不是很有效,所以我认为VS必须以不同的方式做到这一点。你知道吗?

PS:不是关于编译器/链接器进程,而是VS IDE如何工作(甚至在编译或链接最终exe之前)

1 个答案:

答案 0 :(得分:1)

Intellisense是Visual Studio功能的名称,它将定义链接到声明;列出标识符时列出完成;并且在错误的情况下绘制红色波浪线。

Intellisense的工作原理是不断扫描解决方案中的每个源文件,包括键入时的新定义。有关源代码中所有构造的记录存储在数据库中,该数据库位于"solution_name.VC.db"文件的磁盘上。当添加新的定义或声明时,无论是头文件还是源文件,Intellisense都不需要花很长时间来查找数据库中的任何相关项。

如果删除.VC.db文件,然后打开解决方案,Intellisense将花费相当长的时间重新扫描所有内容,然后才能开始正常工作。 IDE还会告诉您它正在“解析”状态栏中的文件。