C26135
предупреждение C26135: Отсутствует заметка <заметка> для функции <функция>.
Предупреждение C26135 выдается, когда анализатор определяет, что функция является функцией-оболочкой блокировки, имеющей побочный эффект захвата или освобождения блокировки.Если код не предназначен быть функцией-оболочкой, то либо протекает блокировка (если запрашивается блокировка), либо она была освобождена неправильно (если освобождается блокировка).
Пример
Следующий пример генерирует предупреждение C26135, поскольку соответствующая заметка побочного эффекта отсутствует.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
void MyEnter(DATA* p)
{
// Warning C26135:
// Missing side effect annotation _Acquires_lock_(&p->cs)
EnterCriticalSection(&p->cs);
}
void MyLeave(DATA* p)
{
// warning C26135:
// Missing side effect annotation _Releases_lock_(&p->cs)
LeaveCriticalSection(&p->cs);
}
Предупреждение C26135 также выводится тогда, когда обнаруживается побочный эффект условной блокировки.Для аннотирования условного эффекта используйте заметку _When_(ConditionExpr, LockAnnotation), где LockAnnotation является или _Acquires_lock_, или _Releases_lock_, и выражение предиката ConditionExpr является логическим условным выражением.Побочные эффекты других заметок на одной и той же функции происходят только тогда, когда ConditionExpr имеет значение true.Поскольку ConditionExpr используется для передачи условия обратно вызывающему объекту, то он должен включать переменные, используемые в вызывающем контексте.Это относится к параметрам функции, глобальным переменным, членам класса или возвращаемым значениям.Для просмотра возвращаемого значения следует использовать специальные ключевое слово в заметке, return, как показано в следующем примере.
typedef struct _DATA
{
CRITICAL_SECTION cs;
int state;
} DATA;
_When_(return != 0, _Acquires_lock_(p->cs))
int TryEnter(DATA* p)
{
if (p->state != 0)
{
EnterCriticalSection(&p->cs);
return p->state;
}
return 0;
}
Для общих или монопольных блокировок, также известных как блокировки читатель/писатель, можно выразить побочные эффекты блокировки с помощью следующих заметок:
_Acquires_shared_lock_(LockExpr)
_Releases_shared_lock_(LockExpr)
_Acquires_exclusive_lock_(LockExpr)
_Releases_exclusive_lock_(LockExpr)