#define call_function(fun, member) fun##_##number ()
// ------------------------^
// should be "number".
Несмотря на это, вы получите только fun_i
. Вы не можете вызывать макросы препроцессора во время выполнения, потому что они используются только в предварительной обработке (даже перед анализом и компиляцией).
Вам необходимо расширить цикл вручную.
call_function(fun, 0);
call_function(fun, 1);
call_function(fun, 2);
call_function(fun, 3);
call_function(fun, 4);
call_function(fun, 5);
call_function(fun, 6);
call_function(fun, 7);
call_function(fun, 8);
call_function(fun, 9);
Или используйте __COUNTER__
(требуется gcc ≥ 4.3):
#define CONCAT3p(x,y,z) x##y##z
#define CONCAT3(x,y,z) CONCAT3p(x,y,z)
#define call_function(func) CONCAT3(func, _, __COUNTER__)()
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);