¿Necesito tratar casos en los que realmente no tengo nada para mover / copiar memmove()/ memcpy()como casos extremos?
int numberOfBytes = ...
if( numberOfBytes != 0 ) {
memmove( dest, source, numberOfBytes );
}
o debería simplemente llamar a la función sin verificar
int numberOfBytes = ...
memmove( dest, source, numberOfBytes );
¿Es necesaria la verificación en el fragmento anterior?

memcpyRespuestas:
Del estándar C99 (7.21.1 / 2):
Por tanto, la respuesta es no; la verificación no es necesaria (o sí, puede pasar cero).
fuente
npuede tener el valor cero". Tiene razón en que no puede pasar punteros nulos, pero eso no es sobre lo que pregunta la pregunta.Como dice @You, el estándar especifica que memcpy y memmove deben manejar este caso sin problemas; ya que generalmente se implementan de alguna manera como
ni siquiera debería tener ninguna penalidad de rendimiento que no sea la llamada a la función; si el compilador admite intrínsecos / inlining para tales funciones, la verificación adicional puede incluso hacer que el código sea un poco más lento, ya que la verificación ya está hecha en ese momento.
fuente