在编辑头文件时,VS Intellisense如何从stdafx.h中查找定义



这是我知识中一个令人讨厌的漏洞,我似乎找不到答案。

我理解为什么它在编译期间工作(头从来没有单独编译过,所以stdafx.h已经包含在内(,但不理解为什么它能在编辑时工作。

假设我有以下文件:

stdafx.h

#pragma once
#include <string>

MyFunction.h

#pragma once
void MyFunction( std::string Text );

MyFunction.cpp

#include "stdafx.h"
#include "MyFunction.h"
void MyFunction( std::string Text )
{
// implementation here
}

当我编辑MyFunction.h时,Intellisense如何找到std::string以实现自动完成,而不是将其显示为未定义,等等?

我问这个问题部分是出于好奇,部分是因为如果我不知道这个机制,那么我就不知道我是否有破坏它的风险,也不知道当我知道的时候如何修复它。我已经看到它破坏了很多次,导致大部分有问题的标题都被标记为错误,然后在某个时候,它要么只是自我修复,要么我接受它不会回来,并在标题中添加一些额外的战略包含。

重复一遍:我不是问在编译过程中如何找到std::string,而是问在编辑头文件时如何找到它。

VS Intellisense在编辑时如何从stdafx.h中查找定义头文件?

在不同版本的VS(VS2012~VS2019(中进行了一些测试后,我认为您所经历的是关于VS intellisense的预期行为。

要回答您最初的问题How does VS Intellisense find...:

MyFunction.h中编辑时,我认为Intellisense通过读取MyFunction.cpp文件中的数据或信息(#include statements(来找到stdafx.h中的定义。

也就是说:当我在当前项目中有a.h, b.h and b.cpp时,如果b.cpp有语句#include "a.h"#include "b.h",那么Intellisense会搜索这三个文件中的定义。因此,即使您将#include <string>stdafx.h移动到MyFunction.cpp文件,MyFunction.h也可以识别这些定义。

因此,如果一个test.chp文件引用(包含(了一个test.h,并且这个test.cpp文件还使用#include来引用(包括(test2.h、test3.h…在编辑test.h时,Intellisense将自动搜索test.cpp、test2.h和test3.h中的定义…在我看来,VS Intellisense在这种情况下就是这样工作的。(在我的机器中,VS2012、VS2015、VS2017、VS2019的行为相同(

希望这有助于解决你的困惑,如果我误解了什么,请随时纠正我:(

相关内容

  • 没有找到相关文章

最新更新