Олдфаг (02.02.2016 16:26, просмотров: 1) ответил SciFi на Надо завести переменную, в которой будет сидеть размер:
Привет от сбежавшего)) Ну тут же просится икс макро.
//Вот есть тип указатель:
typedef void(*Event_TypeDef)(void);
//Вот пара функций:
void hand0(void) {;}
void hand1(void) {;}
// Начнём? Вот таблица с именами функций.
#define TBL_PTF(X_MACRO) \
X_MACRO( hand0 ) \
X_MACRO( hand1 )
// Создать массив указателей.
#define EXPAND_AS_ARRAY(n) n,
Event_TypeDef Event_List[] = { TBL_PTF(EXPAND_AS_ARRAY) };
// Создать перечисление с декорированными именами.
#define EXPAND_AS_ENUM(n) en_ ## n,
typedef enum{ TBL_PTF(EXPAND_AS_ENUM) SIZEOF_ARRAY_PTR }enum_t;
// Объявить extern c явным указанием размера, чтобы все файлы проэкта могли знать его длину
// Объявление extern должно быть после enum, чтобы уже был определен SIZEOF_ARRAY_PTR
extern Event_TypeDef Event_List[SIZEOF_ARRAY_PTR];
void main( void ) { printf("%d\n", SIZEOF_ARRAY_PTR); }