Quiero imprimir ‘Hola’ incluso antes de que se ejecute main (). ¿Cómo lograrás eso?

No estoy seguro de si eso es posible en los reinos del Estándar C ya que la ejecución comienza desde main (). Sin embargo, es fácilmente posible con extensiones.

1] Usando la extensión de atributo de constructor de GCC.

__ atributo __ ((constructor))
vacío foo ()
{
printf (“hola mundo \ n”);
}
int main (nulo) {}

2] En Linux, anule la definición predeterminada de _start. La ejecución comienza desde la función _start () que hace un poco de contabilidad y luego llama al punto de entrada del programa main ().

#include
#include

int main (nulo)
{
devuelve 0;
}

void _start (void)
{
printf (“hola, mundo \ n”);
int ret = main ();
_exit (ret);
}

Compilar como: gcc file.c -nostartfiles

-nostartfiles es importante, de lo contrario, el enlazador se quejará de múltiples definiciones de símbolo _start!

En Java, el bloque estático hace esta magia. En realidad, cualquier bloque estático declarado fuera del método principal se ejecuta antes que el método principal.

Prueba de clase pública
{
estático
{
System.out.println (“Se invoca el bloque estático”);
}
público estático vacío principal (String args [])
{
System.out.println (“Hola principal”);
}
}

Guarde este código como Test.java y compílelo y ejecútelo.

Sí … ver código

clase pública HelloPrint {

estático{

System.out.print (“Hola”);

}

public static void main (String [] args) {

System.out.println (“Principal ejecutado”);

}

}

La directiva “pragma” en c se usa para ejecutar cualquier declaración antes de ejecutar main ().