¿Podemos escribir main () dos veces?

La respuesta es “sí”, al menos en GCC utilizando la función de función anidada (no estándar).

El siguiente código funciona como se esperaba:

[código]

#include

int main () {

fprintf (stdout, “Hola mundo # 1 \ n”);

int main () {

fprintf (stdout, “Hola mundo # 2 \ n”);

devuelve 0;

}

principal();

}

[/código]

Aquí está la salida:

[código]

Hola mundo # 1

Hola mundo # 2

[/código]

¿Por qué funciona esto? Las funciones anidadas tienen alcance léxico. La llamada a main() en el cuerpo de main() encuentra la función anidada main() dentro del alcance más cercano (el cuerpo de la función) y deja de buscar el símbolo en ese punto. Por lo tanto, no hay conflicto con el main() global main() . Durante la compilación, el vinculador encuentra el main() global y usa esa dirección como destino para la llamada desde _start() . Estoy sacando esto de algunos rincones polvorientos de la memoria; Las correcciones son inusualmente bienvenidas.

La documentación de GCC para funciones anidadas está aquí. Clang usa una idea similar llamada Bloques que podría permitirte hacer un truco similar. Aquí hay un buen resumen de las sutilezas involucradas: Dar el cierre a C. Kelly Kinkade puede explicar esto mucho mejor que yo, y espero que lo haga.

nb ¿Por qué el marcado de bloque de código ya no funciona en Quora?

No, no puede tener más de una función principal en lenguaje C. Sin embargo, es posible en Java. En Java, la función principal que tiene argumentos de cadena como parámetro se ejecutará primero.

Puede hacer esto solo si usa primitivas de compilación condicional, como esta:

#ifdef MYWAY

principal() { … }

#elifdef OR_THE_HIGHWAY

principal () { … }

#más

#error “¿Ni mi camino ni la autopista? ¡Duuude, toma una decisión!”

#terminara si

Sí, puede usar la función principal dos veces, pero el programa devolverá el valor basura y se atascará en un bucle infinito hasta que la pila esté llena.

Por ejemplo->

int main ()

{

int x = 10;

principal();

}

Puedes probar este ejemplo.