다음을 통해 공유


경고 C6031

반환 값이 무시됨: 'called-function'이 예기치 않은 값을 반환할 수 있습니다.

설명

경고 C6031은 호출자가 함수의 반환 값 실패를 확인하지 않음을 나타냅니다. 호출되는 함수에 따라 이 결함으로 인해 프로그램이 임의로 오작동하는 것처럼 보일 수 있습니다. 여기에는 오류 상황이나 리소스 부족 상황에서 발생하는 크래시 및 데이터 손상이 포함됩니다.

일반적으로 디스크, 네트워크, 메모리 또는 기타 리소스가 필요한 함수에 대한 호출이 성공할 것이라고 가정하는 것은 안전하지 않습니다. 호출자는 항상 반환 값을 확인하고 오류 사례를 적절하게 처리해야 합니다. 또한 값이 검사되었는지 확인하는 _Must_inspect_result_ 주석을 사용하는 것도 유용한 방법입니다.

이 경고는 C 및 C++ 코드 모두에 적용됩니다.

코드 분석 이름: RETVAL_IGNORED_FUNC_COULD_FAIL

예시

다음 코드는 경고 C6031을 생성합니다.

#include <stdio.h>
int main()
{
    fopen("test.c", "r"); // C4996, C6031 return value ignored
    // code ...
}

이 경고를 수정하려면 다음 코드에 표시된 대로 함수의 반환 값을 확인합니다.

#include <stdio.h>
int main()
{
    FILE* stream;
    if ((stream = fopen("test.c", "r")) == NULL)
    {
        return;
    }
    // code ...
}

다음 코드는 안전 함수 fopen_s를 사용하여 이 경고를 수정합니다.

#include <stdio.h>
int main()
{
    FILE* stream;
    errno_t err;

    if ((err = fopen_s(&stream, "test.c", "r")) != 0)
    {
        // code ...
    }
}

다음 코드에서 볼 수 있는 것처럼 호출자가 _Check_return_ 속성으로 주석이 지정된 함수의 반환 값을 무시하는 경우에도 이 경고가 생성됩니다.

#include <sal.h>
_Check_return_ bool func()
{
    return true;
}

int main()
{
    func();
}

이전 경고를 수정하려면 다음 코드에 표시된 대로 반환 값을 확인합니다.

#include <sal.h>
_Check_return_ bool func()
{
    return true;
}

int main()
{
    if (func())
    {
        // code ...
    }
}

함수의 반환 값을 무시해야 하는 경우 반환된 값을 std::ignore에 할당합니다. std::ignore에 할당하면 개발자 의도가 명확하게 나타나며 향후 코드 유지 관리에 도움이 됩니다.

#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.
    // ... 
}

참고 항목

fopen_s: _wfopen_s
SAL 주석을 사용하여 코드 결함 줄이기