C28193
警告 C28193:變數的值必須被檢查。
這則函式提供的警告表示呼叫函式不會檢查指定的變數值。傳回的值加註 _Check_return_ 附註,但是呼叫的函式不會使用此值,或在不檢查之下覆寫它。
這則警告與 C6031這則警告類似,不過只有在程式碼不測試、不檢查變數的值時,例如將它用於比較時,這個警告才會被回報。簡單的地指派值並不會被視為用來避免警告的一次足夠的測試。給函式之外的結果命名會被視為一次足夠的測試,不過應把它的結果與 _Check_return_標註在一起。
某些函式 (例如 strlen) 專門為其傳回值而存在,因此它能有 _Check_return_ 附註。對這些函式而言,當傳回值是未使用時,程式碼剖析工具可以回傳這個警告。這通常表示程式碼是無效的,例如它可能包含無法刪除的剩餘程式碼。不過在某些罕見的情況,傳回值會刻意不使用。最常見的例子是,是字串長度被傳回但實際上在其他測試之前並沒有被使用。其他導致路徑模擬字串長度結束但未使用的測試。發生這種情況時,程式碼可以是正確的,不過可能會降低執行效能。
有兩個主要策略來處理傳回值未使用的情況:
重新排列程式碼,以便讓字串長度沿著它需要的路徑傳回。
使用 #pragma的警告來隱藏警告--如果藉由重新排列程式碼,您可能會讓程式碼太複雜或不實用。
範例
下列範例程式碼會產生這則警告:
IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
...
下列程式碼範例可以避免這則警告:
IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
...
if (nMapRegs < MIN_REQUIRED_MAPS) {
...
}