C6031
警告 C6031: 已忽略傳回值: <function> 可能傳回未預期的值
這則警告表示呼叫函式不會檢查發出其傳回值失敗信號之函式呼叫的傳回值。這項缺失會導致程式隨機發生何種錯誤行為,則會依據呼叫的函式而定,包括在發生錯誤或資源不足之情況下的損毀及資料毀損。
一般而言,假設要求磁碟、網路、記憶體或其他資源的呼叫函式一律會成功是不妥的。呼叫端應該一律要檢查傳回值,並適當地處理錯誤狀況。同時考慮使用 _Must_inspect_result_ 附註,以一個有用的方式對檢查的值進行檢查。
範例
下列程式碼將產生出這個警告:
#include <stdio.h>
void f( )
{
fopen( "test.c", "r" ); // return value ignored
// code ...
}
若要更正這則警告,請檢查函式的傳回值,如下列程式碼所示:
#include <stdio.h>
void f( )
{
FILE *stream;
if((stream = fopen( "test.c", "r" )) == NULL )
return;
// code ...
}
下列程式碼會使用安全函式 fopen_s,更正這則警告:
#include <stdio.h>
void f( )
{
FILE *stream;
errno_t err;
if( (err = fopen_s( &stream, "test.c", "r" )) !=0 )
{
// code ...
}
}
如果呼叫端會忽略加註 _Check_return_ 屬性 (Property) 之函式的傳回值,也會產生這則警告,如下列範例所示:
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
func(); // Warning C6031
}
若要更正前一則警告,請檢查傳回值,如下列程式碼所示:
#include <sal.h>
_Check_return_ bool func();
void test_f()
{
if( func() ) {
// code …
}
}