Esencialmente, un parámetro de una función es una variable local, por lo que esta práctica no es mala en principio.
Por otro lado, hacer esto puede llevar a dolores de cabeza de mantenimiento. Si otro programador aparece más tarde, podría esperar que la variable contenga el valor pasado, y el cambio causará un error.
Una justificación para reutilizar la variable es una noción errónea de la eficiencia del uso de la memoria. En realidad, no puede mejorar la eficiencia y puede disminuirla. La razón es que el compilador puede detectar automáticamente si es útil usar el mismo registro para dos variables diferentes en dos momentos diferentes, y lo hará si es mejor. Pero el programador no debe tomar esa decisión para el compilador. Eso limitará las elecciones que el compilador puede hacer.
La práctica más segura es utilizar una nueva variable si necesita un nuevo valor y confiar en el compilador para hacerlo eficiente.
Desde la perspectiva del compilador, cada asignación a una variable existente se puede tratar como una nueva variable. Entonces el compilador puede hacer que el código sea igual de eficiente ya sea que el programador haya creado una nueva variable o no. De hecho, la mayoría de las microarquitecturas han cambiado de nombre de registro de todos modos, por lo que el compilador ni siquiera tiene que molestarse. –