MSVC中的"interface"关键字是什么?

24

我正在查阅Windows 8.1 SDK,在UnknownBase.h中看到了一些内容,例如:

typedef interface IUnknown IUnknown;

我从未见过这个 interface 关键词。注意这是一个明确为 .h 头文件,由 cl.exe 处理的。它不是IDL文件,也不是由 midl.exe 处理。

我在网上找到了这个: http://msdn.microsoft.com/en-us/library/50h7kwtb.aspx

但是 __interfaceinterface 不同

有人能帮我解释一下吗?


1
有没有在某个地方定义了 #define interface?它肯定不是 C++ 的关键字,但预处理器可以让它看起来像一个。 - Greg Hewgill
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680509(v=vs.85).aspx - BLUEPIXY
1
在编辑器中右键单击“interface”,并选择“转到定义”。 __interface是一个非标准关键字,在MSDN中有很好的文档记录。可以看出,它提供了比struct更多的保证。该概念在许多语言中都很重要,在COM中也非常重要。它也可以在C++中表达,但需要更多的编程技巧以避免错误。编译器只有理解该概念时才能告诉您何时犯了错误。 - Hans Passant
1
@HansPassant 奇怪的是,当我在 Visual Studio 中右键单击“interface”时,“转到定义”选项是灰色的(这正是我首次在堆栈溢出上发布此问题的原因)。但是如我在下面给 MarcoA 的评论中所描述的那样,使用 findstr 可以解决问题。不过很奇怪 Visual Studio 找不到它。 - fieldtensor
1个回答

20

微软有一些特定于编译器的扩展,比如你链接的那个,但是 interface 不应该是本地C++编译器特定的关键字,而应该是一个定义,用来代替某些东西(在BaseTyps.h中,它曾被定义如下)

# define interface  struct

这里链接

如果您想验证这一点,请使用grep搜索此定义,您应该会找到类似的内容。


参考资料:http://social.msdn.microsoft.com/forums/vstudio/en-US/06bf1dea-1d20-4ec3-b9a1-3d673d7fcd8d/what-is-the-interface-keyword-in-native-c


4
哇,没错,就是这样。我在C:\Program Files (x86)\Windows Kits\8.1\Include里面执行了命令findstr /s /i /c:"#define interface" *,在combaseapi.h中找到了#define interface struct - fieldtensor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接