次の方法で共有


警告 C28193

変数は検証が必要な値を保持しています

この警告は、呼び出し元の関数が、関数によって提供された指定された変数の値をチェックしていないことを示します。 戻り値には _Check_return_ の注釈が付けられますが、呼び出す側の関数はこの値を使用していないか、またはチェックせずに値を上書きしています。

この警告は警告 C6031 に似ていますが、コードが変数の値をテストまたは検査しない場合にのみ報告されます (比較で変数を使用するなど)。 値を割り当てるだけでは、この警告を回避するための十分な検査とは見なされません。 関数からの結果のエイリアシングは十分なチェックと見なされますが、結果自体に _Check_return_ の注釈を付ける必要があります。

特定の関数 (strlen など) は、戻り値に対してほぼ排他的に存在するので、_Check_return_ 注釈があることに意味があります。 これらの関数の場合、Code Analysis ツールは、戻り値が使用されていないときにこの警告をレポートすることがあります。 この警告は、通常、コードが正しくないことを示します。たとえば、削除される可能性のある残余コードが含まれている可能性があります。 しかし、まれに戻り値が意図的に使用されない場合があります。 そのうち最も一般的なのは、文字列の長さが返されるものの、実際には他のテストが行われる前には使用されていない場合です。 文字列の長さが使用されずに終わると、この他のテストでパスがシミュレートされます。 この場合、コードは正しいものの、非効率的である可能性があります。

戻り値が使用されていない場合は、次の 2 つの主要な方針で対処できます。

文字列の長さが必要なパスにのみ沿って返されるように、コードを並べ替えます。

#pragma 警告を使用してこの警告を非表示にします (コードを並べ替えると、コードが複雑になりすぎる場合や、それ以外の原因で有用性が低くなる場合)。

次のコード例では、この警告が生成されます。

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...

次のコード例では、この警告は生成されません。

IoGetDmaAdapter(pPDO, &DevDesc, &nMapRegs);
//...
if (nMapRegs < MIN_REQUIRED_MAPS) {
//...
}