¿Qué hace ‘return 0’ en este código a continuación?

Puedes leer la explicación aquí:
C (lenguaje de programación)
La versión original era: [30]
principal()
{printf (“hola, mundo \ n”);
}

Un programa “hola, mundo” que cumple con los estándares es: [a]
#include
int main (nulo)
{printf (“hola, mundo \ n”);
}
Tenga en cuenta el comentario correspondiente a [a]:

El código de ejemplo original se compilará en la mayoría de los compiladores modernos que no están en modo de cumplimiento estándar estricto, pero no cumple totalmente con los requisitos de C89 o C99. De hecho, C99 requiere que se produzca un mensaje de diagnóstico.

Ese mensaje de diagnóstico requerido es
devuelve 0;

La llave de cierre indica el final del código para la función principal. De acuerdo con la especificación C99 y más reciente, la función principal devolverá implícitamente un estado de 0 al alcanzar el} que termina la función. El sistema de tiempo de ejecución lo interpreta como un código de salida que indica una ejecución exitosa. [31]

Supongo que esto suena un poco contradictorio, en esa nota [a] indica que se debe generar un mensaje de diagnóstico en C99, mientras que la nota anterior indica que C99 y las versiones posteriores devolverán implícitamente un estado de diagnóstico de 0 cuando la llave de cierre del se alcanza la función principal, a menos que interprete que significa que el compilador proporcionó el mensaje de diagnóstico requerido “return 0;” para ti al llegar a la llave de cierre.

Si devuelve 0; no está incluido, y emitió el comando para compilar el programa desde la línea de comando, no volvería a la línea de comando después de haber dado el comando para compilar el código, como el sistema de tiempo de ejecución (shell de Linux o como se llame el ejecutable de) aún no recibió el código de salida diciéndole que la compilación había finalizado (el sistema operativo cree que el programa todavía está compilando). (No estoy seguro si este problema ocurre en la compilación o durante la ejecución de las instrucciones compiladas). Al menos eso es lo que supongo, tal vez se generaría un mensaje de error en las versiones anteriores a C99 y saldría nuevamente a la línea de comando (no lo he probado).

Si ejecuta esto desde un shell, haciendo return 0; en main() hará que un cero sea el estado de salida del proceso. Esto es útil si está ejecutando su programa desde un script de shell, ya que puede verificar el estado de salida de su programa C y hacer que el shell haga cosas diferentes dependiendo del estado de salida de su programa C.

Por ejemplo, suponga que el código se llama “retorntest” y lo llama con un script bash, es decir

#! / bin / bash

./returntest

si [$? -eq 0]
luego
echo “éxito de retorno”
salida 0
más
echo “retornados fallan”
salida 1
fi

Puede ver que puede usar esto para indicar un error al golpearse a sí mismo. Tenga en cuenta que en shells Unix / Linux, el estado de retorno debe ser de 0 a 255 (aunque el tipo de retorno sea int ).

El valor de retorno de la función int main en C indica si el programa sale normalmente y será capturado por el sistema operativo. 0 significa que no pasó nada malo, mientras que cada código de retorno distinto de cero indica un tipo de error.

Como el tipo de retorno de main es int, debería devolver un número entero al proceso de llamada. 0 significa que el programa se ejecutó correctamente y sale.
Si la compilación permite el tipo de retorno nulo de main, entonces no tiene que devolverse nada.

return 0 indica la ejecución exitosa de su código.
en general, en las convenciones c, el valor de retorno 0 se utiliza para el éxito, al igual que en las llamadas al sistema. Y como dice Greg Kemnitz, es significativo en los scripts de shell para verificar el estado de retorno del código.

Gracias

Este es el valor devuelto por su programa al sistema operativo.
También ha mencionado el tipo de retorno de la función principal como int, por lo que también es una razón para devolver un valor int.

__libc_main () es la función proporcionada por el sistema operativo que llama a la función principal. Cuando el código principal y su código completo finalizan la ejecución si se devuelve un valor 0, esto significa que el código se ejecutó normalmente y no se produjo ninguna anormalidad, pero un valor de retorno distinto de cero generalmente se trata como si ocurriera algún error y si lo vería en un depurador lo haría notificarle, programa terminado o salido con el código de salida “cualquier valor distinto de cero”.

Como el tipo de retorno de la función principal es un int, por lo tanto, se requiere una declaración de retorno con un valor entero y la mayoría de los programadores usan ‘return 0’ pero puede usar cualquier valor entero entre los límites del tipo de datos int.

Generalmente no es necesario. En la antigua C esta era la salida (0); Simplemente devuelve el control al sistema operativo con un valor de retorno “0”. Los buenos compiladores generan una “salida” en el acabado “principal”} “Lo pones allí, porque el tipo” principal “es” int “y querías estar seguro, el signo de retorno es” OK “.

El concepto de cualquier función tiene la siguiente firma es
() “. Su función es
int main (void) “, lo que significa que tiene que devolver cualquier cosa de tipo entero, por eso “return 0″ o cualquier otro entero debe devolverse al final. Si realiza la firma de la función como ” void main (void) OR void main () “, no se le pedirá que devuelva nada. En lo que respecta a su función, imprimirá el resultado de la búsqueda binaria y luego devolverá 0. Espero que ayude.

El valor de retorno de main se usa de una manera diferente, se devuelve al shell que llamó al programa.
En el contexto del shell, el valor se interpreta de manera diferente. Allí, 0 tradicionalmente significa “sin error”, mientras que los valores mayores que cero indican errores y el valor en sí contiene algunas pistas sobre qué tipo de error ocurrió.

Tome este fragmento de “man grep”:

ESTADO DE SALIDA
La utilidad grep sale con uno de los siguientes valores:

0 Se seleccionaron una o más líneas.
1 No se seleccionaron líneas.
> 1 Se produjo un error.

Por lo general, para indicar la ejecución exitosa del programa, por ejemplo, en T-SQL en procedimientos almacenados, el valor devuelto de 0 representa la ejecución exitosa y no cero significa que hubo un error

El valor de retorno indica cómo sale el programa. Para la salida normal, el programa debería devolver 0, si hay algunas excepciones, el programa debería devolver un valor distinto de cero. Sin embargo, no hay reglas para devolver un valor distinto de cero.

Al igual que cuando completa cualquier trabajo, dice ” Listo “, de la misma manera que la computadora dice retorno 0. El retorno de 0 le dice al sistema operativo que la tarea se completó con éxito. El regreso de cualquier número entero distinto de cero muestra un mal funcionamiento en la tarea.

More Interesting

¿En qué subáreas de matemáticas debería centrarme para mejorar mis algoritmos en informática?

¿Cuál es la diferencia entre el método de Broyden y DFP?

¿Por qué SAS es mucho más rápido que R? Utilicé el código para encontrar los primeros k números primos en SAS y R para comparar su eficiencia, y los códigos son esencialmente los mismos, pero los resultados están fuera de mi mente.

¿Qué matemáticas están involucradas en la base de datos?

¿Cómo podemos abordar para resolver el problema de 'Infinite House of Pancakes' de Google Code Jam 2015?

¿Qué hace que Donald Knuth sea tan especial?

¿Cuál es el problema P vs NP?

¿Es posible crear un lenguaje completo de Turing con solo un puntero de instrucción modificable, una operación de intercambio y un incremento por una operación?

Puedo tomar la teoría de grafos o la combinatoria el próximo semestre. Me interesa la informática teórica. ¿Cuál sería mejor?

¿Cómo obtengo un límite superior para T (n) = T (n / 2) + n?

¿Cuál es la diferencia entre la variable de control y la variable de confusión?

Cómo aumentar la velocidad de cálculo de la función trigonométrica en una computadora

En Java, ¿por qué usar un iterador para iterar a través de LinkedList más rápido que usar un bucle for?

¿Cuál es la diferencia entre la Olimpiada de informática zonal y la Olimpiada cibernética zonal? ¿Cuál deberíamos elegir?

¿Cuál es una explicación para esta ecuación de números de punto fijo con signo?