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.
- Si se le da un gráfico G no dirigido simple, ¿cómo podemos encontrar todas las subgrafías inducidas de G, que son gráficos de girasol, dentro de una cantidad de tiempo polinómica?
- Dados n objetos y p posiciones divididas equitativamente alrededor de una tabla, n <= p, ¿cuántas combinaciones de ubicación existen?
- ¿Cuál es el propósito del software matemático computacional?
- ¿Podemos decir que una relación de recurrencia es un tiempo de ejecución del algoritmo recursivo?
- ¿Por qué es importante para un programador tener un buen dominio de los conceptos matemáticos?
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).