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) {}
- ¿Existe algún hardware de código abierto para impresoras de inyección de tinta / láser y dispositivos multifunción?
- ¿Cómo podemos elegir un papel de sublimación de peso diferente?
- ¿Cuál es la mejor impresora de inyección de tinta para uso doméstico?
- ¿Dónde puedo comprar una copia impresa en lienzo de La noche estrellada de van Gogh en India?
- ¿Por qué es tan difícil encontrar marcos de cuadros de 8 × 12?
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!