我试图了解IDE(我使用的是Visual Studio)如何知道在何处找到头文件声明的实现。
假设我有2个cpp文件和1个头文件:
main.cpp
,包含main()
功能并包含person.h
person.h
,包含一些在person.cpp
person.cpp
,包含person.h
声明的实现,还定义了person.h
所以我的理解是main.cpp
和person.cpp
知道在哪里找到函数声明,但person.h
必须在某些.cpp
文件中搜索这些实现。
现在,Visual Studio如何跟踪这一点?每次创建新的头文件时,VS是否需要解析项目中的每个.cpp
文件以查找声明的实现位置?头文件没有任何要搜索的.cpp
个文件的声明,但它找到了它们! Visual Studio是否扫描项目中的每个.cpp
文件?
那么,在一个包含数百或数千个.cpp
文件的大型项目中会发生什么?这似乎不是很有效,所以我认为VS必须以不同的方式做到这一点。你知道吗?
PS:不是关于编译器/链接器进程,而是VS IDE如何工作(甚至在编译或链接最终exe之前)
答案 0 :(得分:1)
Intellisense是Visual Studio功能的名称,它将定义链接到声明;列出标识符时列出完成;并且在错误的情况下绘制红色波浪线。
Intellisense的工作原理是不断扫描解决方案中的每个源文件,包括键入时的新定义。有关源代码中所有构造的记录存储在数据库中,该数据库位于"solution_name.VC.db"文件的磁盘上。当添加新的定义或声明时,无论是头文件还是源文件,Intellisense都不需要花很长时间来查找数据库中的任何相关项。
如果删除.VC.db文件,然后打开解决方案,Intellisense将花费相当长的时间重新扫描所有内容,然后才能开始正常工作。 IDE还会告诉您它正在“解析”状态栏中的文件。