3

有没有办法取消字符串作为宏参数提供?我需要能够调用名称在字符串中的函数。像这样的东西:

void hello() {
    printf("Hello, world!");
}

call_func("hello");

我将如何实现 call_func。它将位于一个#included 模块中,用于调用主 c 文件中的函数。如果有另一种方法可以做到这一点,名称不必在字符串中,但可以作为参数传递给可以的函数。这就是我的意思:

#define call_func(X) X()
void do_something(Some_kind_of_C_func_type i) {
    call_func(i)
}
void hello() {
    printf("Hello, world!");
}

do_something(C_FUNC(hello));
4

2 回答 2

1

好的,我看到了两种方法来做到这一点,这取决于你的目标是什么。

首先是函数指针;本质上将函数视为变量。请参阅此处以获取快速概览。

或者,您可以将要以这种方式调用的代码构建为共享库,然后使用 dlopen() 或 LoadLibrary() 之类的东西打开库,然后使用任一接口访问变量/函数。

于 2010-08-28T18:32:45.590 回答
0

虽然不完全清楚您想要完成什么,但您不能使用宏来获取在运行时输入的字符串并解析同名函数。

您可以做的是,将所有函数注册到一个列表(或稍微复杂的数据结构)中,并用它们的名字来调用它们。

#define INSERT(fn) addfn(#fn, &fn)
void addfn(char const* name, func_t fp);

哪里addfn可以获取发出的指针并将其放在条目下的字典中name

于 2010-08-28T18:39:15.183 回答