从相同的父函数调用不同的子函数

时间:2009-05-29 13:57:27

标签: c function parent-child

我希望有一个像这样的共同父函数

void main (param 1, param 2)
{
    <stuff to do>
    param1();
    print("The function %s was called", param 2);
    <more stuff to do>
}

其中param 1将是要调用的函数的名称,param 2将是一些描述性文本。 param 2很简单,我已经解决了,但我不清楚如何通过传入函数名称从同一个父函数调用函数。这是父函数所做的一些其他事情,但不是让多个父函数只在他们调用的函数或带有switch语句的单个父项中有所不同,如果这种方式可行,则id更喜欢。有什么想法吗?

5 个答案:

答案 0 :(得分:5)

你实际想要为param 1传递的是一个指向你想要调用的函数的函数指针,而不是该函数的名称。

看看这个关于函数指针的tutorial

答案 1 :(得分:0)

这是什么语言?如果函数不是这种语言的一等公民,你就不能这样做

如果它类似于Java,你可以通过传入一个实现接口的对象来解决这个问题,并在对象上调用该函数。

答案 2 :(得分:0)

我会说函数指针是一件好事,但你可以利用预处理器来做你想做的事情......(学习如何使用函数指针虽然是好事)... < / p>

我的意思是,如果param2是静态已知的东西,那么拥有函数指针就没用了..如果你有动态值,那么函数指针会好一些,一旦你想给param2 = foo运行你的程序param2 = bar ...

你真的需要不同的功能原型,或者你能不能拥有......

#ifdef BAR
 void foo() { whatever(); }
#elif defined(FOO)
 void foo() { whocares(); }
#else
 #define foo() do{} while(0)
#endif

并且始终具有相同的主体,但在命令行上给出不同的-D ...

答案 3 :(得分:0)

这样的东西?

#include <stdio.h>
void foo(void) { printf("foo\n"); }
void bar(void) { printf("bar\n"); }
static inline void parent(void func(), const char *msg)
{
    /* do stuff */
    func();
    printf("%s called\n", msg);
    /* more stuff */
}
int main(void)
{
    parent(foo, "test1");
    parent(bar, "test2");
    return 0;
}

答案 4 :(得分:-2)

一般来说,这在C语言和编译语言中并不容易。 在Windows上,我有类似的东西(很长一段时间):

typedef void(* simple_void_function )()
HMODULE exe_module = GetModuleHandle( NULL ); // not sure about this
simple_void_function = GetProcAddress( exe_module, param1 );
(*simple_void_function)();

如果您愿意手动将args推入堆栈,实际的函数调用签名可以更灵活。

相关问题