she (28.07.2011 17:15, просмотров: 66) ответил fk0 на GCC. Как сделать, чтоб при старте программы вызвались функций из подключенных модулей, но так чтоб их в main не записывать? В C++ -- понятно, статические конструкторы. В голом C?
Очевидно - можно препроцессором, кроссплатформеннее некуда. Но громоздко и долго компилится (в одном проекте так сделал, подзадрало уже). В головнике (инклюдится в мэйн.ц)
void LedsInit (void);
#define I_ALIAS LedsInit
#include "..//init//init_func_add.def"
#undef I_ALIAS
init_func_add.def:
#ifndef I_ALIAS
#error Erroneous init function register attempt
#endif
#ifndef INIT0
#define INIT0
#ifdef __INIT
void (* init0)() = I_ALIAS;
#endif
#define INITF_COUNT 1
#else
#ifndef INIT1
#define INIT1
#ifdef __INIT
void (* init1)() = I_ALIAS;
#endif
#undef INITF_COUNT
#define INITF_COUNT 2
...
Ну и из мэйна вызвать что-то типа
#ifdef INIT0
init0();
#ifdef INIT1
init1();
#ifdef INIT2
init2();
...
Векторов можно один раз накопипастить до жопы и больше об этом не думать.