Preciso tratar casos quando, na verdade, não tenho nada para mover / copiar com memmove()
/ memcpy()
como casos extremos
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
ou devo apenas chamar a função sem verificar
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
A verificação do snippet anterior é necessária?
memcpy
Respostas:
Do padrão C99 (7.21.1 / 2):
Portanto, a resposta é não; a verificação não é necessária (ou sim; você pode passar zero).
fonte
n
pode ter o valor zero". Você está correto ao dizer que não pode passar ponteiros nulos, mas não é sobre isso que a pergunta está perguntando.Conforme dito por @You, o padrão especifica que o memcpy e o memmove devem lidar com este caso sem problemas; uma vez que geralmente são implementados de alguma forma, como
você não deve ter nenhuma penalidade de desempenho além da chamada de função; se o compilador suportar intrínsecos / inlining para tais funções, a verificação adicional pode até tornar o código um micro-bit mais lento, uma vez que a verificação já é feita no momento.
fonte