У меня есть структура, которая содержит объявление вроде этого:
Нет, нет. Это синтаксическая ошибка. Вы ищете:
void (*functions[256])();
Какой массив указателей на функции. Однако обратите внимание, что void func()
не является «функцией, которая не принимает аргументов и ничего не возвращает». Это функция, которая принимает неопределенные числа или типы аргументов и ничего не возвращает. Если вы хотите «без аргументов», вам нужно это:
void (*functions[256])(void);
В C ++ void func()
означает означает «не принимает аргументов», что вызывает некоторую путаницу (особенно если функциональность C, указанная для void func()
, имеет сомнительное значение.)
В любом случае, вы должны typedef
указатель на вашу функцию. Это сделает код намного проще для понимания, и у вас будет только один шанс (на typedef
), чтобы неправильно понять синтаксис:
typedef void (*func_type)(void);
// ...
func_type functions[256];
В любом случае, вы не можете назначить массив, но вы можете инициализировать массив и скопировать данные:
static func_type functions[256] = { /* initializer */ };
memcpy(struct.functions, functions, sizeof(functions));