Hola,
una función es un pedazo de código encargado de hacer una tarea
específica para devolver un resultado. En otro lenguajes como Pascal existe
una diferencia entre funciones (function) y procedimientos (procedure) donde
los procedimientos tienen la misma definición salvo porque éstos no
devuelven resultado alguno.
En C sólo hay funciones con lo que siempre se debe devolver algo. Esto es un
pequeño problema ya que acciones como mostrar un vector no necesitan
devolver ningún resultado mientras que una suma sí. Para solventar este
defecto, si se puede llamar así, C utiliza la famosa palabra reservada VOID
que es algo asi como "nada". Una función C se generaliza como :
<Tipo del valor devuelto> <Nombre de la función> (<Parámetros>) {
<Código de la función>
return (<valor a devolver);
}
Como ejemplo tenemos :
int suma ( int op1, int op2) {
int result;
result = op1 + op2;
return result;
}
Esta función es un ejemplo muy sencillo. En realidad no se suelen
crear funciones para estos códigos tan sencillo porque es más costoso el
llamar a las funciones que escribir directamente el código. Como ya se dijo
antes el tipo del valor a devolver puedes ser void en caso de no querer
devolver nada:
void mostrar_vector(int *vector) {
int i;
for(i = 0; i < TAM; i++)
printf("%d - ", vector[i]);
}
La finalidad de una función es el poder encapsular código concreto
para que estas puedan ser transportadas a otros programas y aprovechar su
reusabilidad. Es importante, en este sentido, intentar que el código de las
funciones sea lo mas genérico posible (independiente de nuestro problema) y
específico; es decir, si queremos ordenar y mostrar un vector deberíamos
tener 2 funciones, una para cada acción en lugar de una función que ordena y
muestre a la vez. Esto es fácil de entender ya que si el día de mañana haces
un programa y necesitamos ordenar un vector podemos cortar y pegar dicha
función y usarla como si tal. Si pusíéramos las 2 acciones dentro de una
sóla función estarías obligado a mostrar siempre que ordenes y quizás, en
programas futuros no necesite las 2 opciones sino sólo ordenar.
Por último explicar un poco más el por qué si es poco código es mejor
no hacer una función como en el ejemplo de la suma. La respuesta es que
cuando son pocas líneas o tareas sencillas y lo metes en una función
empeoras la velocidad de ejecución de tu programa ya que al llamar a una
función se deben crear registros de activación, guardar el estado actual de
la máquina, hacer un cambio de contexto y cuando se termine la llamada
deshacer todo eso. Es evidente que nosotros no podemos saber con cuántas
líneas de código es rentable hacer una función y para cuántas no, pero eso
es algo casi estimativo ya que es palpable que para una línea, como en el
caso de la función suma, si sabremos que es peor hacer la función. Si aún
así queremos encapsular el código en algo parecido a una función pero que no
nos lleve dicho coste entonces podemos tirar de las MACROS que es otro tema.
Espero haber sido de ayuda.
Un saludo.