¿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?
memcpy
Respuestas:
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
n
puede 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