C26135
警告 C26135: 在函式 <func>遺漏的附註 <annotation> 。
如果分析器推斷函式是讓鎖定取得或鎖定版本副作用鎖定的包裝函式,警告 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 也會發出。若要 Pragma 一個條件效果,請使用 _When_(ConditionExpr, LockAnnotation) 附註, LockAnnotation 是或 _Acquires_lock_ 或 _Releases_lock_ 和述詞運算式 ConditionExpr 為布林 (Boolean) 條件運算式。當 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)