jueves, 16 de septiembre de 2010

Ver el retorno de un programa

Cuando programamos en C/C++, es estándar tener un valor de retorno para la función int main. El valor que retorne, será interpretado por el Sistema operativo (Por esto es tan importante tener el retorno puesto, y por eso no es aconsejable declarar main como void main)

Si nuestro programa retorna 0, significa que el programa se ha ejecutado sin problemas. Por el contrario, si retorna un número distinto que 0, significa que se hay un error (Si respetamos el estándar a la hora de programar, claro).

Como bien he dicho, el valor es leído por el sistema. Pero, puede ser leído por el usuario? Claro que si.

Al ejecutar nuestro programa, el valor de retorno queda guardado en una variable llamada $?. Por lo cual, podemos ejecutar nuestro programa, y cuando acabe la ejecución, llamar a 'echo' por ejemplo para imprimir por pantalla el estado de nuestro programa. Veamos un ejemplo:

Este programa, al ser ejecutado con parámetros, retorna 0 en caso de coincidir el parámetro, y 1 en caso de no coincidir. También imprime un mensaje, YES o NO. Vamos a llamarle 2 veces, con distintos parámetros, y a imprimir la variable $?.


serch@serch-server:~/Escritorio$ gcc 2.c
serch@serch-server:~/Escritorio$ ./a.out hola
No
serch@serch-server:~/Escritorio$ echo $?
1
serch@serch-server:~/Escritorio$
serch@serch-server:~/Escritorio$ ./a.out cont
Yes
serch@serch-server:~/Escritorio$ echo $?
0
serch@serch-server:~/Escritorio$

Como vemos, tras la 1ª ejecución, al no coincidir el parámetro con el guardado dentro del programa, nos retorna 1 (Error) y el mensaje No.

Tras la 2ª llamada, al si coincidir, nos devuelve Yes y nos retorna 0.

Con esto, podemos comprobar el estado de nuestros programas.

También podemos redirigir el flujo de datos a un documento. Esto es mas sencillo aún, basta con hacer:

./a.out >> /home/serch/salida.txt
(Cada cual que ponga el nombre de su programa y la ruta donde va a guardar la salida...)

2 comentarios:

  1. Pues mira, lo de como mirar el retorno y que valor es tomado como bueno, no lo sabia. Uno no se acuesta sin aprender algo nuevo cada día.

    ResponderEliminar
  2. Es lo bueno, aprender y aprender xD

    ResponderEliminar