¿Puede un programa en C ser escrito sin main()?

Sí se puede escribir un programa en C, sin el main()


  1. #include <stdio.h> 




  2. extern void _exit(register int); 




  3. int _start(){ 




  4. printf("¡Hola mundo!n"); 




  5. _exit(0); 







En casi todos los libros se nos enseña que main() es el punto de entrada de la ejecución de un programa. No es completamente cierto. A un nivel abstracto, es verdad sólo desde la perspectiva de un programador. Pero desde la perspectiva de los sistemas, _start() es la primera función que se llama. _start() establece el entorno para la ejecución del programa y luego llama a main().
Aquí está la salida del programa anterior.
Edición 1: Aquí hay algo más de información sobre por qué he escrito void extern _exit(register int);
_start() y _exit() son funciones que el “sistema” llama automáticamente antes de la ejecución del programa para configurar el entorno y hacer algún otro trabajo a nivel de máquina. _exit() está predefinido y por eso hemos usado la clase de almacenamiento externo (es decir, extern) para decirle al compilador que ya ha sido declarado en algún lugar. Si nos perdemos la palabra clave extern estamos intentando sobrecargar la función que no es válida en el lenguaje C.
_exit() funciona a nivel de máquina por lo que toma la entrada teniendo un tipo de datos de clase de almacenamiento de registro, por lo que se utiliza la palabra clave register. Si no escribes el vacío externo _exit(register int), el compilador te dará sólo un aviso pero el programa funcionará bien 🙂
Edición 2: Hoy recibí este mensaje:
¿Cómo supiste que se llama primero a _start y luego a main()?
mi único propósito de hacer esta pregunta es que ¿de donde puedo obtener estos detalles sobre la programación?
En cada libro podemos encontrar fácilmente la sintaxis y todas las construcciones del lenguaje, pero estas cosas no tienen ningún tipo de detalle.
¿Puedes por favor ayudarme/guiarme desde donde puedo aprender sobre estos pequeños detalles?
En realidad esta es una muy buena pregunta, por eso estoy actualizando mi respuesta, pero la respuesta es más simple de lo que usted podría pensar. Todo está delante de nosotros, sólo tenemos que prestar más atención a los detalles minuciosos que normalmente ignoramos.
Así que para que sepan cómo supe de _start, les mostraré esto usando un ejemplo. Aquí hay un simple programa que escribí y que no tiene main().
Ahora compilamos el programa y vamos a ver lo que sucede.
Dice en la función _start: referencia indefinida a main. Significa que no hay referencia a main() en _start().
Fue entonces cuando supe de _start. Luego, con un poco de ayuda de Google, descubrí lo que es realmente esta función y es la función que se llama primero incluso antes que main(). Así que ya ves, sólo tenemos que dejar de ignorar los errores o advertencias y debemos buscar lo que realmente significa.

Deja un comentario