对于为负责定义这些宏的 Microsoft 团队工作过、认识工作过的人或与 Microsoft 团队有任何关系的任何人来说,这是一个好奇的问题。
我了解__stdcall是什么,并且知道为什么要使用它,但我只是不明白为什么微软会为同一件事制作三个单独的宏。我能看到的唯一好处是在源文件中提供一些语义含义,但除此之外,据我所知,它没有提供其他好处。显然这样做是有道理的,我只是想知道它是什么!:)
看来您对用于提供语义信息的不同宏是正确的。MSDN这样说CALLBACK
:
CALLBACK、WINAPI 和 APIENTRY 都用于定义具有 __stdcall 调用约定的函数。Windows API 中的大多数函数都是使用 WINAPI 声明的。您可能希望将 CALLBACK 用于您实现的回调函数,以帮助将函数识别为回调函数。
两者WINAPI
和APIENTRY
都被称为:
系统函数的调用约定。
我不知道为什么系统函数有两个宏。
ooga 答案的链接是https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
Microsoft 在“了解 SAL”中提供了更多详细信息:
“Microsoft 源代码注释语言 (SAL) 提供了一组注释,您可以使用这些注释来描述函数如何使用其参数、它对参数所做的假设以及它在完成时所做的保证。这些注释是在头文件 <sal.h> 中定义。Visual Studio code analysis for C++ 使用 SAL annotations 来修改其对函数的分析。有关用于 Windows 驱动程序开发的 SAL 2.0 的更多信息,请参阅 SAL 2.0 Annotations for Windows Drivers。
原生地,C 和 C++ 只为开发人员提供了有限的方式来一致地表达意图和不变性。通过使用 SAL 注释,您可以更详细地描述您的函数,以便使用它们的开发人员可以更好地了解如何使用它们。”