Конечно, просто составьте таблицу указателей на функции.
#define BLAH 0
#define FOO 1
void (*table_function[])(void) = {someBlah, someFoo};
Если все они имеют одинаковый интерфейс и тип возвращаемого значения, вы можете просто переключать их, переключая записи таблицы.
Затем вы вызываете функцию, выполняя
table_function[BLAH]();
Если вы хотите поменять местами функцию, просто скажите
table_function[BLAH] = otherBlah;
Кроме того: не делайте этого, если вы не пишете какую-либо среду JIT-компиляции или ВМ, обычно вам не нужны такие конструкции, и если они вам нужны, у вас, вероятно, плохой день архитектуры.
Хотя, если у вас есть опыт в ОО-дизайне, вы можете разрабатывать полиморфные конструкции в С таким способом (игнорируйте это, если это не имеет смысла).