问题 MSVC中的“interface”关键字是什么?


我正在浏览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

__interface 是不一样的 interface

谁能在这里提醒我?


3754
2017-08-11 00:05


起源

有没有 #define interface 某处?它肯定不是原生的C ++关键字,但预处理器可以使它看起来像一个。 - Greg Hewgill
msdn.microsoft.com/en-us/library/windows/desktop/... - BLUEPIXY
只需在编辑器中右键单击“界面”,然后选择“转到定义”。 __interface是一个非标准的关键字, 在MSDN中有详细记录。正如你所知,它提供了更多的保证 结构 确实。这个概念在很多语言中都很大,在COM中很大。它可以用C ++表示,也可以没有语言扩展,只是更容易出错。编译器可以告诉您何时出错,但只有在理解了概念时才能告诉您。 - Hans Passant
@HansPassant奇怪的是,当我右键点击时 interface 在视觉工作室的选择 Go To Definition 是灰色的(这是首先提示我的堆栈溢出帖子)。但正如我在下面对MarcoA的评论中描述的那样,一个发现者做了这个伎俩。奇怪的是,视觉工作室无法找到它。 - patrick-rutkowski


答案:


Microsoft有一些特定于编译器的扩展,例如您链接的扩展 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


10
2017-08-11 00:19



哇,是的,就是这样。我做了一个 findstr /s /i /c:"#define interface" * 从内部 C:\Program Files (x86)\Windows Kits\8.1\Include,并在 combaseapi.h 我发现 #define interface struct - patrick-rutkowski