【发布时间】:2016-06-23 15:20:04
【问题描述】:
这是我正在使用的一段代码:
interface ClassFactory : public IClassFactory
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR *ppv);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// *** IClassFactory methods ***
STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID FAR *ppvObject);
STDMETHOD(LockServer)(BOOL fLock);
public:
ClassFactory();
private:
ULONG RefCount;
};
VS2015 颜色编码关键字如“public”和“private”为蓝色,用户定义类型如“ULONG”和“IClassFactory”为蓝绿色,宏如“STDMETHOD”和“REFIID”为紫色(嗯,也许这就是“茄子”)。对于用户定义的类型和宏,我可以让 Intellisense 通过简单地将光标悬停在符号上来显示定义。因此,如果我将光标放在紫色符号“FAR”上,我会在屏幕上的灰色框中看到 #define FAR far。
符号“接口”用紫色进行颜色编码,就像宏一样。此外,我必须包含 Unknwn.h 才能使用它(将 Unknwn.h 排除在外会导致它被标记为蓝色,并标有“标识符'接口'未定义”错误)。深入 Unknwn.h(然后进入 objbase.h,然后进一步进入 combaseapi.h),我发现这些行:
#define __STRUCT__ struct
#define interface __STRUCT__
因此,“接口”显然是一个宏,就像 FAR 一样。然而,即使 VS2015 对它进行了颜色编码,当我将光标悬停在它上面时,我并没有像我预期的那样得到一个显示 #define interface __STRUCT__ 的灰色框。此外,如果我右键单击它,包含“Peek Definition”和其他条目的弹出菜单会让我看到在上下文中定义宏的行,这些条目会变灰。
为什么 Intellisense 不显示接口宏的定义?
(顺便说一句,我认为在上面的代码-sn-p 中使用“接口”是一种糟糕的技术,因为它声明的“接口”包含一个成员变量;它可能应该是“类”。我'我只是对 IDE 的行为感到困惑,希望有人可以向我解释。)
【问题讨论】:
-
hmmm,可能与
interface是 C# 关键字有关。想知道 Intellisense 的悬停是否有一些混乱 -
这只是一个错误,EDG 前端一直在努力跟上 C++/CX 和 C++/CLI 扩展。使用 connect.microsoft.com 来提醒他们。考虑使用
__interface扩展关键字来获得编译错误。 -
@vu1p3n0x 可能是对的:如果我不包含 Unknwn.h,但将我自己的
#define interface struct添加到我的代码中,则行为是相同的。但是,将interface更改为interfact,IDE 就会正常运行。 @Hans Passant,我按照你的建议做了。 -
无论如何,这是一个错误
标签: visual-studio-2015 macros intellisense