我想做一个令牌连接,但我想用变量的内容而不是它的名字来做这个.像这样.
#define call_function(fun, number) fun##_##number ()while (i < 10 ) { call_function(fun, i); }
但我给fun_number(),我想给fun_1,fun_2,等等...
怎么做?
关于函数指针.
我正在步行处理ascii caracters上的用户输入,我的选项是&*^> <等等,最多十个令牌.
要在带有函数指针的数组中处理它,我需要创建一个包含127个块的数组,只有十个令牌!
这太贵了!谢谢你的所有答案.
提前致谢!!!
#define call_function(fun, member) fun##_##number ()
// ------------------------^
// should be "number".
Run Code Online (Sandbox Code Playgroud)
即便如此,你也只会得到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);
Run Code Online (Sandbox Code Playgroud)
或使用__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);
Run Code Online (Sandbox Code Playgroud)
你需要创建一个函数指针数组并调用该数组.
typedef int (*pfunc)(int);
pfunc[] = {func0,func1,func2,func3};
for(int i = 0; i < 3; i++)
{
pfunc[i](arg);
}
Run Code Online (Sandbox Code Playgroud)
我确信我的语法有问题 - 请查看http://www.newty.de/fpt/fpt.html