_Deref_ и _Outptr_ sal аннотации

В чем разница между Deref а также Outptr SAL аннотации?
Также, когда вы используете различные типы Outptr аннотации типа _Outptr_result_buffer_all_ и _Outptr_result_buffer_?

3

Решение

SAL плохо документирован. Вам нужно посмотреть на sal.h файл.

В чем разница между аннотациями SAL Deref и Outptr

Они одинаковы, за исключением того, что 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, Размер буфера находится в *_PBufferSizeInBytes,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]