Apakah saya perlu menangani kasus ketika saya sebenarnya tidak memiliki apa pun untuk dipindahkan / disalin dengan memmove()
/ memcpy()
sebagai kasus tepi
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
atau haruskah saya memanggil fungsi tanpa memeriksa
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
Apakah perlu memeriksa di cuplikan sebelumnya?
memcpy
Jawaban:
Dari standar C99 (7.21.1 / 2):
Jadi jawabannya tidak; pemeriksaan tidak perlu (atau ya; Anda bisa lulus nol).
sumber
n
dapat memiliki nilai nol". Anda benar bahwa Anda tidak dapat memberikan petunjuk nol, tetapi bukan itu yang ditanyakan oleh pertanyaan itu.Seperti yang dikatakan oleh @You, standar menetapkan bahwa memcpy dan memmove harus menangani kasus ini tanpa masalah; karena mereka biasanya diterapkan entah bagaimana
Anda bahkan tidak boleh memiliki hukuman kinerja selain pemanggilan fungsi; jika kompilator mendukung intrinsik / sebaris untuk fungsi semacam itu, pemeriksaan tambahan bahkan dapat membuat kode mikro-bit-bit lebih lambat, karena pemeriksaan tersebut sudah dilakukan sementara.
sumber