Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的Javascript回调编码风格?_Javascript_C - Fatal编程技术网

C语言中的Javascript回调编码风格?

C语言中的Javascript回调编码风格?,javascript,c,Javascript,C,好吧,这个问题可能会让javascript憎恨者和核心开发人员感到震惊,请原谅我 我喜欢用javascript编写回调函数的方式 var on = function(isTrue, doThis) {if (isTrue) doThis();} 有没有可能在C中复制相同的想法?我知道这取决于类型。 我的情况越来越不一样了: 我有多个布尔值和多个过滤器,所以我的用途是,而不是写作 if (thisIs == true) executeThisVoid(passingThisStruct) 我想

好吧,这个问题可能会让javascript憎恨者和核心开发人员感到震惊,请原谅我

我喜欢用javascript编写回调函数的方式

var on = function(isTrue, doThis) {if (isTrue) doThis();}
有没有可能在C中复制相同的想法?我知道这取决于类型。 我的情况越来越不一样了:

我有多个布尔值和多个过滤器,所以我的用途是,而不是写作

if (thisIs == true) executeThisVoid(passingThisStruct)
我想写:

on(thisIs, function(struct){ do this and this})
或者干脆

on(thisIs, executeThisVoid);

非常感谢大家。

我知道,在C语言中,您可以指向函数。。。因此,如果on是一个获得两个函数指针的方法,而这是一个函数指针,executeThisVoid也是一个函数指针,那么您应该不会有任何问题,只需要在外部作用域中保存该结构,或者创建另一个表示方法调用链的结构(以保存参数和其他内容)。

好的,开始。首先定义:

void on(int thisIs, void (*executeThis)(void)) {
    if (thisIs)
        (*executeThis)();
}
然后,定义someVoid:

void someVoid(void) {
    /* ... */
}
然后,在另一个函数中,调用:

on(1, someVoid);

可以,但它需要接受和传递指向函数的指针:(为什么不好?请你再详细说明一下好吗?不坏。与Javascript相比,它很难看,也很难阅读。@Gaurav Meh。只有当你对合理的C使用感到不舒服时,它才很难阅读。IMO回调是回调;它在语法上有很小的区别。这是C++11中的一个新特性,称为lambdas,不太可能是o出现在C中。您可能会找到另一种选择。