gpt4 book ai didi

c++ - _Deref_ 和 _Outptr_ sal 注释

转载 作者:太空狗 更新时间:2023-10-29 21:21:23 25 4
gpt4 key购买 nike

DerefOutptr SAL 注释有什么区别?另外,何时使用不同类型的 Outptr 注释,如 _Outptr_result_buffer_all_ 和 _Outptr_result_buffer_?

最佳答案

SAL 的文档很少。您需要查看 sal.h 文件。

What is the difference between the Deref and Outptr SAL annotations

它们是相同的,只是Deref注解来自SAL 1,Outptr来自SAL 2(可以表达更多)。所以 Deref 已被弃用。

Also when do you use the different types of Outptr annotation like _Outptr_result_buffer_all_ and _Outptr_result_buffer_?

引用自 sal.h:

Outptr: Returned variable is a pointer type (so param is pointer-to-pointer type). Called function provides/allocated space.

看源码,_Outptr_result_buffer__Outptr_result_buffer_all_几乎是一样的。您提供将分配的元素数量作为参数(如果恰好是一个元素,请使用 _Outptr_)。不同之处在于,前者意味着元素是调用者可写的(隐含它们也是可读的),而后者意味着元素只能是可读的。

查看 C 运行时源代码,只有 _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);

因此此函数在 _PBuffer 中创建了一个(以 null 结尾的)缓冲区。缓冲区的大小在 *_PBufferSizeInBytes 中找到。

关于c++ - _Deref_ 和 _Outptr_ sal 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22599345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com