【发布时间】:2014-11-26 02:51:21
【问题描述】:
在 C 语言中这样的事情是可能的吗?
#include <stdio.h>
void print_str(char *str) {
printf(str);
}
int main() {
void (*f_ptr)() = print_str,"hello world";
f_ptr();
}
//see "hello world" on stdout
简而言之,我想要一个“存储”参数的函数指针。关键是函数指针可以在以后使用,而不需要引用原始数据。
我可以使用这样的东西来耦合函数指针和参数引用
struct f_ptr {
void (*f)();
void *data;
}
void exec_f_ptr(f_ptr *data) {
data->f(data->data):
}
但不会像调用带有参数的函数指针那样优雅。
【问题讨论】:
-
printf(str) 请求格式字符串攻击!
-
您使用了错误的语言。第二种解决方案一般是C中使用的。我们不能只取不同签名的函数指针,并尝试通过相同的代码全部调用它们。 C++ 有更多的功能,更适合这种情况,但具有动态类型和函数作为一流对象的脚本语言通常最适合这种代码。
-
你可以定义一个宏
#define DO_FUN( d ) (d)->f((d)->data),然后用参数调用一个指针,你把你的一行变成DO_FUN(data); -
哦,这就是你正在用 exec 函数做的事情,我现在明白了吗?在那种情况下,每个人都是对的,这几乎是你所拥有的最好的。
标签: c function-pointers