在C中传递代码行作为参数
发布时间:2020-12-16 10:08:08 所属栏目:百科 来源:网络整理
导读:我正在开展一个项目,在这个项目中我有一个相当严格的字数限制(我不是100%肯定什么是合格的单词). 我希望将代码行传递给函数作为参数,我已经在JavaScript中看到了这一点,但我在C中找不到任何内容. 这是我正在寻找的: void onTime(int a,Code myCode) { if(t
我正在开展一个项目,在这个项目中我有一个相当严格的字数限制(我不是100%肯定什么是合格的单词).
我希望将代码行传递给函数作为参数,我已经在JavaScript中看到了这一点,但我在C中找不到任何内容. 这是我正在寻找的: void onTime(int a,Code myCode) { if(timer == a) { //run myCode } } 我可以使用这样的东西: onTime(45,{ //code }); 在C中有没有办法可以做到这样的事情? 解决方法
C不允许传递内联代码(在其他语言中称为lambda表达式).但是,您可以将指针传递给现有函数.
// typedef for a function that takes no arguments and returns void typedef void (*ftype)(void); void func_to_run(void) { ... } void onTime(int a,ftype code) { if(timer == a) { code(); } } 然后你可以像这样调用它: ontime(45,func_to_run); 如果您希望使用它使用的一组值打包函数,则类似于具有可以访问成员变量的成员函数的C类,这涉及一些技巧. 以下是您可以执行以下操作的示例: #include <stdio.h> typedef int (*ftype)(int,int); struct c { int a; int b; ftype add_func; ftype sub_func; }; #define ADD(s) (s)->add_func((s)->a,(s)->b) #define SUB(s) (s)->sub_func((s)->a,(s)->b) int add(int a,int b) { return a+b; } int sub(int a,int b) { return a-b; } void run(struct c *op) { printf("add result=%dn",ADD(op)); printf("sub result=%dn",SUB(op)); } int main() { struct c c1 = { 1,2,add,sub }; struct c c2 = { 3,4,sub }; struct c c3 = { 6,1,sub }; struct c c4 = { 9,sub }; run(&c1); run(&c2); run(&c3); run(&c4); } 这里我们定义一个struct c,它包含两个函数和另外两个变量的函数指针. 宏ADD和SUB用于运行结构的“成员”函数,并将它们传递给要使用的“私有”成员.它隐藏了这样一个事实,即被调用的实际函数与传递给它的参数无关. 此代码输出: add result=3 sub result=-1 add result=7 sub result=-1 add result=7 sub result=5 add result=13 sub result=5 当然,一旦你开始这样做,你就会(粗略地)做C正在做的事情,并且可能最好切换到为OOP制作的C并且现在支持lambdas. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |