Нужно ли мне случаи лечат , когда я actully не имею ничего перемещать / копировать с memmove()
/ memcpy()
в крайних случаях
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
или мне просто вызвать функцию без проверки
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
Необходима ли проверка в предыдущем фрагменте?
memcpy
Ответы:
Из стандарта C99 (7.21.1 / 2):
Итак, ответ - нет; проверка не обязательна (или да, можно пройти ноль).
источник
n
может иметь нулевое значение». Вы правы, что вы не можете передавать нулевые указатели, но вопрос не об этом.Как сказал @You, стандарт определяет, что memcpy и memmove должны обрабатывать этот случай без проблем; поскольку они обычно реализуются как-то вроде
у вас даже не должно быть никаких штрафов за производительность, кроме вызова функции; если компилятор поддерживает встроенные функции / встраивание для таких функций, дополнительная проверка может даже сделать код чуть-чуть медленнее, поскольку проверка уже выполняется в это время.
источник