c - 我应该在函数指针的 typedef 中保留 `_In_` 、 `_Out_` 之类的宏吗?

标签 c winapi typedef

我需要动态加载 WinAPI 函数。因此我定义了一个新类型——指向函数的指针。 我应该在我的 typedef 中保留 _In__Out_ 之类的宏吗?

例如 WinAPI 函数:BOOL WINAPI CloseHandle(_In_ HANDLE hObject);

如何定义指向这个函数的指针?

  • typedef BOOL (WINAPI * CloseHandlePtr)(_In_ HANDLE hObject);
  • typedef BOOL (WINAPI * CloseHandlePtr)(HANDLE hObject);

最佳答案

这些宏是 Microsoft Source Annotation Language(SAL,请参阅 https://msdn.microsoft.com/en-us/library/hh916383.aspx)的一部分,旨在帮助作为人类读者和代码分析工具的注释。

你的 typedef 没有它们也能工作。由于函数指针 typedef 已经足够复杂,有人主张将它们排除在外。

另一方面,将它们排除在外可以防止例如通过查找代码中的错误进行 Visual Studio 代码分析。

关于c - 我应该在函数指针的 typedef 中保留 `_In_` 、 `_Out_` 之类的宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123022/

相关文章:

c - 带 C 后端的简单 GUI 应用程序

c++ - 是否可以保护内存区域免受 WinAPI 的影响?

c++ - 我怎样才能让我的模板类推断出函数指针模板参数的返回值和参数类型

c - GCC:使用 -Wcast-qual 将 const 指针转换为数组 typedef 的 const 指针会抛出警告

c++ - 使用 typedef 模板参数推导失败?

c - 优雅地退出多线程进程

c - .Call mdsplib - METAR - 缓冲区溢出 - 这个 valgrind 输出是什么意思?

c - 初始化一个整数指针,其指针地址本身就是一个值

c++ - Aero Snap 不适用于我的应用程序

c++ - 请解释 "typedef"的语法规则和范围