Cuando queremos dejar claro que una función no tiene que devolver ningún valor, podemos hacerlo indicando al principio que el tipo de datos va a ser "void" (nulo). Por ejemplo, nuestra función "saludar", que se limitaba a escribir varios textos en pantalla, quedaría más correcta si fuera así:
void saludar() {
printf("Bienvenido al programa\n");
printf(" de ejemplo\n");
printf("Bienvenido al programa\n");
}
Muchos compiladores antiguos (previos al estándar C99) permiten que una función se indique sin tipo devuelto, como hicimos en el primer ejemplo, y en ese caso, el lenguaje C no supondrá que no vaya a devolver ningún valor, sino que devolverá un valor entero (int):
main() {
...
}
A partir del estándar C99, es obligatorio indicar el tipo devuelto, así que deberemos usar explícitamente "void", si la función no va a devolver ningún dato. Por eso, la forma habitual de declarar el cuerpo de un programa es:
int main() {
...
}
Eso quiere decir que "main" también devuelve un valor, que se leerá desde fuera de nuestro programa. Lo habitual es devolver 0 si todo ha funcionado correctamente
int main() {
...
return 0;
}
Y devolveríamos otro valor si hubiera habido algún problema durante el funcionamiento de nuestro programa (por ejemplo, si no hemos podido abrir algún fichero):
int main() {
FILE* fichero;
fichero = fopen("nombre.txt", "rt");
if (fichero == NULL) return 1;
...
return 0;
}
Este valor se podría comprobar desde el sistema operativo. Por ejemplo, en MsDos y Windows se lee con "IF ERRORLEVEL", así:
IF ERRORLEVEL 1 ECHO Ha habido un error en el programa
Nota 1: En la mayoría de compiladores, el cuerpo del programa ("main") debe ser devolver un entero (int). Algunos compiladores permiten declarar "main" como "void", pero la mayoría no lo consideran aceptable.
Nota 2: En algunos lenguajes de programación se llama "procedimientos" (en inglés "procedure") o "subrutinas" a las funciones que no devuelven ningún valor, y se reserva el nombre "función" para las que sí dan un resultado.
Ejercicios propuestos:
####
####