Tag: 函数指针

C后期绑定与未知参数

我目前处于需要调用许多在运行时提取的函数指针的情况下。 问题是参数在编译时是未知的。 但是,在运行时我收到的数据允许我知道函数的参数,我甚至可以将参数存储在char *数组中。 问题是我没有函数指针模型来将其强制转换。 在高级语言中,我知道有像“InvokeMethode(String name,Byte [] args)”这样的函数,它像参数一样解释字节数组。 由于C中不存在reflection,我没有希望用函数指针来看这个。 我想到的一个解决方案(它真的很糟糕)是在编译时创建一个函数指针模型,它将以“硬编码方式”将ptr转换为正确的类型,如下所示: void callFunc64Bits(void* funcPtr,long long args); void callFuncVoid(void* funcPtr); 问题是我必须创建像这样的100函数才能正确地转换指针。 有没有办法更有效地做到这一点? 非常感谢你!

can void *用于存储函数指针?

void *以这样的方式定义,它可以指向任何东西。 那么它可以用来指向一个函数(int send())吗? int send(); void* p = send; 可能吗? 当我这样使用时,它没有向我显示错误原因? 如果没有,有没有办法将所有指针存储在一个变量中?

在C(gcc)中获取指向当前函数的指针?

gcc中有一个魔术变量,它持有一个指向当前函数的指针吗? 我想有一种表包含每个函数指针的一组信息。 我知道有一个__func__变量包含当前函数的名称作为字符串但不作为函数指针。 这不是为了调用函数而是仅仅用作索引。 编辑基本上我想做的是能够在执行当前函数之前运行嵌套函数(并且还捕获返回以执行某些操作。)基本上,这就像__cyg_profile_func_enter和__cyg_profile_func_exit(检测函数)。但问题是这些仪器function是全局的而不是function专用的。 编辑在linux内核中,您可以使用include/linux/kallsyms.h unsigned long kallsyms_lookup_name(const char *name) …请注意,必须激活CONFIG_KALLSYMS选项。

在C中使用dlopen时,是否有一种优雅的方法来避免dlsym?

如果在运行时满足特定条件,我需要动态打开共享库lib.so 该库包含~700个函数,我需要加载它们的所有符号。 一个简单的解决方案是定义lib.so包含的所有符号的函数指针,使用dlopen加载库,最后使用dlsym获取所有符号的地址。 但是,考虑到函数的数量,实现此解决方案的代码非常麻烦。 我想知道是否存在更优雅和简洁的解决方案,可能适当使用宏来定义函数指针。 谢谢!

C / C ++中原始指针和函数指针支持的操作是什么?

函数指针支持的所有操作与原始指针有什么不同? 是>,<, =原始指针支持的运算符如果有,有什么用?

作为函数转换的char数组的这个调用是做什么的?

我遇到了这段代码: char code[] = “\xb0\x01\x31\xdb\xcd\x80”; int main(int argc, char **argv) { int (*func)(); func = (int (*)()) code; (int)(*func)(); } 它是从用于Linux和Windows Tutorial的Writing Shellcode复制而来的。 有人可以解释一下这个函数调用(int)(*func)(); 是在做?

将C ++函数指针转换为c函数指针

我正在使用C库开发C ++应用程序。 我必须向C库发送一个函数指针。 这是我的class级: class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); private: Ui::MainWindow *ui; void f(int*); private slots: void on_btn_clicked(); }; 这是我的on_btn_clicked函数: void MainWindow::on_btn_clicked() { void (MainWindow::* ptfptr) (int*) = &MainWindow::f; c_library_function(static_cast(ptfptr), NULL); } C函数应该得到一个指向这样一个函数的指针:void f(int *)。 但上面的代码不起作用,我无法成功将我的f成员函数转换为所需的指针。 有人可以帮忙吗?

关于Pointers To函数声明中的函数

#include #include int fun1() { printf(“I am fun1.”); return 0; } int fun2(int fun()) { fun(); return 0; } int main() { fun2(fun1); return 0; } 上面的程序可以运行。 就我而言,我可以理解int fun2(int (*fun)()) ,但我不知道int fun2(int fun())工作的。 谢谢。

&operator在函数指针赋值中可选

在以下代码中: /* mylog.c */ #include #include /* for atoi(3) */ int mylog10(int n) { int log = 0; while (n > 0) { log++; n /= 10; } return log; } int mylog2(int n) { int log = 0; while (n > 0) { log++; n >>= 1; } return log; } int main(int argc, […]

返回void *的C ++ / C函数指针

我正在尝试调用一个带参数的函数, void(*)(void*, int, const char*) ,但我无法弄清楚如何将这些参数传递给函数。 例: void ptr(int); int function(int, int, void(*)(int)); 我试图像这样调用函数: function(20, 20, ptr(20)); 这可能吗?