在C中动态更改函数

时间:2016-07-11 11:58:58

标签: javascript c function

我想知道这个javascript代码中是否存在C(对于void函数)的等价物:

var myFunction;
myFunction = function(){
    //Some code
}

3 个答案:

答案 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)

如果要更改某个函数调用的行为,可以使用函数指针而不是直接调用该函数:

  • 初始化函数指针fp1,引用a()
  • 致电fp1
  • 使用b()
  • 的引用覆盖函数指针
  • 致电fp1