5. El compilador me da un error de nueva declaración
no válida de una función (redeclaration), pero sólo
la estoy definiendo y llamándola una única vez.
Las
funciones que se llaman sin una declaración en el alcance
(quizás porque la primera llamada precede a la definición
de la función) son asumidas para ser declaradas como de
tipo int y sin ningún tipo de información sobre
los argumentos.
Así
que puede ser este tu caso, que estés llamándola
antes de definirla. Recuerda, que todas las funciones deben ser
declaradas antes de ser llamadas.
Otra posible causa para este error es que la función tenga
el mismo nombre que otra declarada en algún fichero cabecera.
Revísalos y asegúrate de que no hay otra función
con el mismo nombre
.