Если вы используете GCC, вы можете сделать это с помощью атрибута функции constructor
, например:
#include <stdio.h>
void foo() __attribute__((constructor));
void foo() {
printf("Hello, world!\n");
}
int main() { return 0; }
Однако в C нет переносимого способа сделать это.
Если вы не возражаете возиться с вашей системой сборки, у вас есть больше возможностей.Например, вы можете:
#define CONSTRUCTOR_METHOD(methodname) /* null definition */
CONSTRUCTOR_METHOD(foo)
Теперь написать сценарий сборки для поиска экземпляров CONSTRUCTOR_METHOD и вставить последовательность вызовов к ним в функцию в сгенерированном файле .c.Вызвать сгенерированную функцию в начале main()
.