Mit*_*hun 3 c c++ annotations sal
Deref和Outptr SAL 注释之间有什么区别?另外,什么时候使用不同类型的Outptr注释,例如 _Outptr_result_buffer_all_ 和 _Outptr_result_buffer_?
SAL 的记录很少。您需要查看该sal.h文件。
Deref 和 Outptr SAL 注释之间有什么区别
它们是相同的,只是Deref注释来自 SAL 1,Outptr来自 SAL 2(可以表达更多)。因此Deref已被弃用。
另外,什么时候使用不同类型的 Outptr 注释,例如 _Outptr_result_buffer_all_ 和 _Outptr_result_buffer_?
引用sal.h:
Outptr:返回的变量是指针类型(因此 param 是指针到指针类型)。被调用的函数提供/分配空间。
看源码,_Outptr_result_buffer_几乎_Outptr_result_buffer_all_是一样的。您提供将要分配的元素数量作为参数(如果恰好是一个元素,请使用_Outptr_)。不同之处在于,前者意味着元素可以被调用者写入(隐式地它们也是可读的),而后者意味着元素只能读取。
查看 C 运行时源代码,only_Outptr_result_buffer_在很少的地方使用,例如。对于在以下位置创建的缓冲区_dupenv_s:
_Check_return_opt_ _CRTIMP errno_t __cdecl _dupenv_s(
Outptr_result_buffer_maybenull_(*_PBufferSizeInBytes) _Outptr_result_z_ char **_PBuffer,
_Out_opt_ size_t * _PBufferSizeInBytes,
_In_z_ const char * _VarName);
Run Code Online (Sandbox Code Playgroud)
所以这个函数在 中创建一个(以 null 终止的)缓冲区_PBuffer。缓冲区的大小可在 中找到*_PBufferSizeInBytes。
| 归档时间: |
|
| 查看次数: |
2156 次 |
| 最近记录: |