我想知道这个javascript代码中是否存在C(对于void
函数)的等价物:
var myFunction;
myFunction = function(){
//Some code
}
答案 0 :(得分:4)
不是真正等效(因为C是一种不支持匿名或嵌套函数的静态语言)但是你可以有一个变量是函数的指针,并使它指向不同的编译函数匹配变量的类型。
非常简单和基本的例子:
#include <stdio.h>
void function1(void)
{
printf("function1\n");
}
void function2(void)
{
printf("function2\n");
}
int main(void)
{
// Declare a variable that is a pointer to a function taking no arguments
// and returning nothing
void (*ptr_to_fun)(void);
ptr_to_fun = &function2;
ptr_to_fun();
ptr_to_fun = &function1;
ptr_to_fun();
return 0;
}
以上程序将打印出来
function2 function1
答案 1 :(得分:2)
在C中你可以使用函数指针:
void the_function(void) {
// ...
}
void (*my_function)(void) = the_function;
C不支持匿名函数,因此您的函数需要自己拥有一个名称(这里我使用the_function
)。
您可以通过函数指针调用该函数,就像您调用普通函数一样:
my_function();
然而,这种做法受到限制。首先,您必须知道函数所期望的参数的数量和类型。使用错误的参数调用它将调用未定义的行为。此外,您还需要知道返回值的实际类型。这些需要在编译时知道。您需要使用tricks like libffi
来调用您在运行时不知道其签名的函数。
答案 2 :(得分:0)
如果要更改某个函数调用的行为,可以使用函数指针而不是直接调用该函数: