#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);
感謝您糾正我的問題。這個例子我使用了一個循環,但是在真正的問題中,我將不得不使用一個開關。這很慢。 – drigoSkalWalker 2010-03-23 20:08:38
不應該有可能有一個函數指針或一些數組?自從我考慮過C或C++代碼以來,這已經過時了 – Bob 2010-03-23 20:10:09
請注意,雖然CPP不提供循環,但它不是唯一的預處理器。這只是內置的唯一一個。您可以使用更強大的預處理器(如m4)在編譯時執行更復雜的工作。 – Ken 2010-03-23 20:11:17