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以实现自动完成,而不是将其显示为undefined等?

我之所以问是部分出于好奇,部分原因是如果我不知道该机制,那么我不知道自己是否有打破它的风险或在这样做时如何解决它。我已经看到它多次中断,导致大多数有问题的标头被标记为错误,然后在某个时候它要么自行修复,要么我接受它不会再出现并添加一些额外的策略包含在标题中。

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

gaolei3452 回答:VS Intellisense如何在编辑头文件时从stdafx.h中找到定义?

  

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

在不同版本的VS(VS2012〜VS2019)中进行了一些测试之后,我认为您遇到的是关于VS intellisense的预期行为。

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

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

这就是说:当我在当前项目中有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.cpp文件引用(包括)了一个test.h,并且此test.cpp文件也使用#include引用(包括)test2.h,test3.h ...当编辑test.h后,Intellisense将自动在test.cpp,test2.h,test3.h中搜索定义。在我看来,这就是VS Intellisense在这种情况下的工作方式。 (我的机器中VS2012,VS2015,VS2017,VS2019的行为相同)

希望它有助于解决您的难题,如果我误解了任何内容,请随时纠正我:)

本文链接:https://www.f2er.com/3166037.html

大家都在问