簡體   English   中英

_Deref_和_Outptr_ sal注釋

[英]_Deref_ and _Outptr_ sal annotations

DerefOutptr 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運行時源,只有極少數地方使用_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找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM