¿Por qué es necesario principal en un progtwig?

Hice un progtwig que todavía está en desarrollo. No me declaré principal en mi progtwig deliberadamente. Cuando estoy desarrollando una biblioteca para hacer gráficos y otros algoritmos que usaría en mis progtwigs. El propósito de desarrollar dicha biblioteca en C es trabajar sobre los problemas presentados en el libro Introducción a Algoritmos Thomas H Coreman Aquí está el código si alguien quiere verlo.

#include #include #define GREY 1 #define BLACK 0 #define WHITE 2 typedef struct node *graph; graph cnode(int data); //cnode is to create a node for graph void cgraph(void); struct node { int data, color; struct node *LEFT, *RIGHT, *TOP, *DOWN; }; graph root = NULL; void cgraph(void) { int n, choice, dir, count; choice = 1; count = 1; graph priv, temp; printf("Printf we are making a graph the first is root node\n"); while (choice == 1) { count++; if (count == 1) { printf("This is going to be root node \n"); scanf("%d", &n); root = cnode(n); count--; priv = root; } //ending if else { printf ("Enter direction you want to go LEFT 1 RIGHT 2 TOP 3 DOWN 4\n"); scanf("%d", &dir); printf("Enter the data for graph node\n"); scanf("%d", &n); temp = cnode(n); if (dir == 1) { priv->LEFT = temp; } if (dir == 2) { priv->RIGHT = temp; } if (dir == 3) { priv->TOP = temp; } if (dir == 4) { priv->DOWN = temp; } priv = temp; } //ending else printf ("Enter 1 to continue adding nodes to graph any thing else would take you out\n"); scanf("%d", &choice); } //ending while } //ending main graph cnode(int data) { graph temp = (graph) malloc(sizeof(graph)); temp->data = data; temp->LEFT = NULL; temp->RIGHT = NULL; temp->TOP = NULL; temp->DOWN = NULL; temp->color = -1; return temp; } 

Cuando compilé el progtwig anterior obtuve el siguiente error.

 cc graph.c /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' collect2: ld returned 1 exit status 

¿Qué significa este error y por qué debo declarar main en mi progtwig?

¿Por qué? Porque la norma lo dice (en su mayoría).

La función main es necesaria para los entornos C alojados (los entornos independientes pueden iniciarse de la forma que deseen).

Si está desarrollando una biblioteca, no necesita un main para la biblioteca en sí, pero no podrá convertirlo en un ejecutable sin uno (aparte de usar trucos no portátiles). Y, como mínimo, debe tener uno para el conjunto de pruebas de todos modos.

En otras palabras, su biblioteca debe tener un conjunto de pruebas grande que se controle desde una función main (probablemente en un archivo o archivos fuente separados) para que pueda probar cualquier trabajo nuevo y prueba de regresión para asegurarse de que no se haya llenado. El viejo trabajo.

Por defecto, gcc (y la mayoría de los comstackdores de C) comstackn y enlazan a un ejecutable independiente. La función main() es necesaria para que el código de inicio sepa dónde debe comenzar la ejecución de su código.

Para comstackr el código de su biblioteca sin vincular, use gcc -c graph.c . En este caso, graph.c no requiere una función main() .

main es obligatorio estar presente si está incorporando su código en una aplicación, ya que las funciones principales sirven como punto de entrada para la aplicación.

Pero, si su código se está construyendo como lib, entonces main no es necesario.

EDITAR: Marque esto para obtener información sobre bibliotecas estáticas y compartidas.

Un progtwig necesita un punto de entrada para aclarar dónde comienza su progtwig. Sin eso, es imposible que sus herramientas sepan a qué función se debe llamar primero.

Es posible especificar otra función como punto de entrada, pero al usar main, todos los que lean su código sabrán dónde comienza su progtwig.

Por lo general, al desarrollar bibliotecas, colocará main en un progtwig separado y lo usará como punto de partida mientras prueba su biblioteca. Algo como esto:

 gcc -o library.o -c library.c gcc -o main.o -c main.c gcc -o testprogram library.o main.o 

Normalmente main() se inicia por si mismo. Si ignora main() , necesita un arrancador para ejecutar el progtwig. básicamente main es un identificador que el comstackdor identifica cuando se ejecuta un progtwig.

Main es necesario para ejecutar su progtwig. Cuando intenta ejecutar un progtwig escrito en C, va a la función principal y se ejecuta desde aquí. Si está escribiendo una biblioteca como dijo, es mejor que escriba un código de prueba simple para llamar a las funciones de su biblioteca y comstackr y ejecutar ese progtwig de prueba para probar su biblioteca.

Hablando formalmente, es el requisito de un cargador, en lugar de comstackdores. El progtwigdor sabría que cada progtwig DEBE cargarse en un contexto antes de su ejecución. esto es responsabilidad de los cargadores, pero los cargadores no tienen conocimiento de qué línea de código es el punto de entrada si no hay un estándar para definir el “punto de entrada”.