Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengembalikan nilai yang diabaikan: 'called-function' dapat mengembalikan nilai yang tidak terduga
Keterangan
Peringatan C6031 menunjukkan pemanggil tidak memeriksa nilai pengembalian fungsi untuk kegagalan. Tergantung pada fungsi mana yang dipanggil, cacat ini dapat menyebabkan perilaku program yang tampaknya acak. Itu termasuk crash dan kerusakan data dalam kondisi kesalahan atau situasi sumber daya rendah.
Secara umum, tidak aman untuk mengasumsikan bahwa panggilan ke fungsi yang membutuhkan disk, jaringan, memori, atau sumber daya lainnya akan berhasil. Pemanggil harus selalu memeriksa nilai pengembalian dan menangani kasus kesalahan dengan tepat. Pertimbangkan juga untuk menggunakan _Must_inspect_result_ anotasi, yang memeriksa apakah nilai diperiksa dengan cara yang berguna.
Peringatan ini berlaku untuk kode C dan C++.
Nama analisis kode: RETVAL_IGNORED_FUNC_COULD_FAIL
Contoh
Kode berikut menghasilkan peringatan C6031:
#include <stdio.h>
int main()
{
fopen("test.c", "r"); // C4996, C6031 return value ignored
// code ...
}
Untuk memperbaiki peringatan ini, periksa nilai pengembalian fungsi seperti yang ditunjukkan dalam kode berikut:
#include <stdio.h>
int main()
{
FILE* stream;
if ((stream = fopen("test.c", "r")) == NULL)
{
return;
}
// code ...
}
Kode berikut menggunakan fungsi fopen_s aman untuk memperbaiki peringatan ini:
#include <stdio.h>
int main()
{
FILE* stream;
errno_t err;
if ((err = fopen_s(&stream, "test.c", "r")) != 0)
{
// code ...
}
}
Peringatan ini juga dihasilkan jika pemanggil mengabaikan nilai pengembalian fungsi yang dianotasi dengan _Check_return_ properti seperti yang ditunjukkan dalam kode berikut.
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
func();
}
Untuk memperbaiki peringatan sebelumnya, periksa nilai pengembalian seperti yang ditunjukkan dalam kode berikut:
#include <sal.h>
_Check_return_ bool func()
{
return true;
}
int main()
{
if (func())
{
// code ...
}
}
Dalam kasus di mana perlu untuk mengabaikan nilai pengembalian fungsi, tetapkan nilai yang dikembalikan ke std::ignore. Menetapkan untuk std::ignore dengan jelas menunjukkan niat pengembang dan membantu dalam pemeliharaan kode di masa mendatang.
#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.
// ...
}
Lihat juga
fopen_s, _wfopen_s
Menggunakan Anotasi SAL untuk mengurangi cacat kode