Aracılığıyla paylaş


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::ignoreatayı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