2012-02-04 18 views

Respuesta

5

Cuando pregunte a su sistema operativo para ejecutar un archivo, se carga en la memoria, y salta a él punto de partida (_start, etc). En este punto, hay un código, que llama al main y luego sale (El enlazador es responsable de esta parte). Si va a escribir el programa sin la función main, el enlazador le dará un error, ya que no pudo encontrarlo.

0

Su programa (que es una serie de códigos agrupados dentro de las funciones) debe tener un punto de partida ¿no?

Algo debe llamarse primero para ejecutar el resto.

Por lo tanto, ese punto de partida es main, que es llamada por el proceso padre en su O/S (lo que cada vez que sea) y le permite a su ejecución del programa

+0

yah, lo sé, pero cuando escribo '$./A.out' qué programa estoy ejecutando en realidad? – Vikram

+0

Se bifurca un proceso que llama main (esto es un archivo ELF) – Cratylus

7

La función main se llama, en la práctica, por la C tiempo de ejecución.

Puede escribir un programa sin main pero tiene tiene un punto de entrada. Los diferentes sistemas operativos le permiten especificar diferentes puntos de entrada para su programa, pero todos cumplen la misma función que main. En Windows, puede usar WinMain. En Linux puede vincular sin el CRT y definir su propia función _start (¡pero no puede devolverla!)

Un programa sin un punto de entrada es como un automóvil sin ruedas: no va a ninguna parte.

+0

¿No es al revés? ¿El programa llama y enlaza con C runtime? – Cratylus

+0

Más como un automóvil sin motor de arranque, el automóvil está allí, podría hacer todo lo que se supone que debe hacer, pero no hay nada que inicie el proceso – whitelionV

+0

1) ¿Qué quiere decir con C runtime? 2) ¿Quiere decir que si escribo un programa en C que se está ejecutando perfectamente en mi sistema operativo ... no puedo ejecutarlo en un sistema operativo diferente porque diferentes sistemas operativos tienen diferentes puntos de entrada? – Vikram

0

La respuesta más simple es esta: el usuario de su programa llama a la función principal cuando inicia su aplicación. ¿Alguna vez has usado una terminal de comando? Si lo tiene, sabrá que puede pasar argumentos a un comando. Por ejemplo:

$ grep word myfile 

¿Qué está pasando debajo de las sábanas es el terminal mira lo que ha escrito a continuación, llama al método del programa grep main[word, myfile] y pasa como segundo argumento a este método. Esta es una simplificación, pero espero que ayude.

Cuestiones relacionadas