Uyarı C6031
Döndürülen değer yoksayıldı: 'called-function' beklenmeyen değer döndürebilir
Açıklamalar
Uyarı C6031, çağıranın bir işlevin dönüş değerini hata için denetlemediğini gösterir. Hangi işlevin çağrıldığına bağlı olarak, bu hata rastgele program yanlışlarına yol açabilir. Bu, hata koşullarında veya düşük kaynak durumlarında kilitlenmeleri ve veri bozulmalarını içerir.
Genel olarak, disk, ağ, bellek veya diğer kaynaklar gerektiren işlevlere yapılan çağrıların başarılı olacağını varsaymak güvenli değildir. Çağıranın her zaman dönüş değerini denetlemesi ve hata durumlarını uygun şekilde işlemesi gerekir. Ayrıca, değerin _Must_inspect_result_
yararlı bir şekilde incelendiğini denetleyen ek açıklamayı kullanmayı da göz önünde bulundurun.
Bu uyarı hem C hem de C++ kodu için geçerlidir.
Kod analizi adı: RETVAL_IGNORED_FUNC_COULD_FAIL
Örnek
Aşağıdaki kod C6031 uyarısını oluşturur:
#include <stdio.h>
int main()
{
fopen("test.c", "r"); // C4996, C6031 return value ignored
// code ...
}
Bu uyarıyı düzeltmek için aşağıdaki kodda gösterildiği gibi işlevin dönüş değerini denetleyin:
#include <stdio.h>
int main()
{
FILE* stream;
if ((stream = fopen("test.c", "r")) == NULL)
{
return;
}
// code ...
}
Aşağıdaki kod, bu uyarıyı düzeltmek için safe işlevini fopen_s
kullanır:
#include <stdio.h>
int main()
{
FILE* stream;
errno_t err;
if ((err = fopen_s(&stream, "test.c", "r")) != 0)
{
// code ...
}
}
Bu uyarı, çağıran aşağıdaki kodda gösterildiği gibi özelliğiyle ek açıklama ekli bir işlevin _Check_return_
dönüş değerini yoksayarsa da oluşturulur.
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
func();
}
Önceki uyarıyı düzeltmek için aşağıdaki kodda gösterildiği gibi dönüş değerini denetleyin:
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
if (func())
{
// code ...
}
}
bir işlevin dönüş değerini yoksaymak gerektiğinde, döndürülen değeri olarak std::ignore
atayın. öğesini std::ignore
atamak, geliştirici amacını açıkça gösterir ve gelecekteki kod bakımına yardımcı olur.
#include <tuple>
#include <ctime>
#include <cstdlib>
#include <stdio.h>
int main()
{
std::srand(static_cast<unsigned int>(std::time(nullptr))); // set initial seed value to system clock
std::ignore = std::rand(); // Discard the first result as the few random results are always small.
// ...
}
Ayrıca bkz.
fopen_s
, _wfopen_s
Kod hatalarını azaltmak için SAL Ek Açıklamalarını kullanma