Ну тогда так: Добавить массив целых по числу функций. Каждый бит - это какое-то условие (если 16 условий хватит).
enum func_flag { func_cond1 = 0x01, func_cond2 = 0x02, func_cond3 = 0x04 // и т.д., имена, естественно, осмысленные }; unsigned flags[] = { func_cond1 | func_cond3 // первая функция блокируется в этих случаях func_cond_4, // и т.д. func_cond_2 | func_cond_5, ... }; unsigned current_flags = 0; // сначала всё разрешено void call_func(unsigned char i) { if( flags[i] & current_flags) return; // заблокировано (arr[i])(); }