¿Puedes ejecutar una función en la inicialización en c?

¿Puedes ejecutar una función en la inicialización en c?

Si está utilizando GCC, puede hacerlo con un constructor atributo de función, por ejemplo:

#include <stdio.h>

void foo() __attribute__((constructor));

void foo() {
    printf("Hello, world!\n");
}

int main() { return 0; }

Sin embargo, no existe una forma portátil de hacer esto en C.

Sin embargo, si no te importa jugar con tu sistema de compilación, tienes más opciones. Por ejemplo, puede:

#define CONSTRUCTOR_METHOD(methodname) /* null definition */

CONSTRUCTOR_METHOD(foo)

Ahora escriba un script de compilación para buscar instancias de CONSTRUCTOR_METHOD y pegue una secuencia de llamadas en una función en un archivo .c generado. Invoca la función generada al comienzo de main() .


El estándar C no admite tal operación. Si no desea utilizar características específicas del compilador para hacer esto, entonces su siguiente mejor opción podría ser crear un indicador estático global que se inicialice en falso. Luego, cada vez que alguien invoca una de sus operaciones que requieren que se registre el puntero de función, marca esa bandera. Si es falso, registra la función y luego establece el indicador en verdadero. Las llamadas posteriores no tendrán que realizar el registro. Esto es similar a la instanciación diferida utilizada en el patrón de diseño OO Singleton.