Ank*_*rVj 29 c static function-pointers
我认为源文件中的静态函数不能直接从文件外部调用.但是,如果我以某种方式设法将指向此函数的指针转换为另一个文件,那么我可以从该文件中调用此函数.如果是的话,是否有任何情况我们想要采用这种方式而不是简单地使函数非静态?
但是,如果我以某种方式设法将指向此函数的指针转换为另一个文件,那么我可以从该文件中调用此函数.
是的,这是完全可能的.该功能对链接器不可见,但它位于可执行文件中.您可以随时跳转到其地址.
我不确定方案.也许你希望别人在调用其他函数(当然是非静态函数)之后才调用你的函数.所以你让他们获得它,然后他们可以调用它.
正如另一个提到的,你可以做到。您可能想要的一个例子是某种“驱动程序”。您可以传回一个包含 open、close、read 和 write 函数的结构,而不必使实际函数可公开访问。
是的你可以。如果你必须调用一个需要函数指针作为回调的函数,你可以使用static,这样函数符号就不会污染全局命名空间,也不会导致链接器冲突。最常用的例子可能是 qsort:
struct Data { ... };
static int compareData(const void* a, const void* b) { /* cast to Data and compare */ }
...
qsort(array, count, sizeof(Data), &compareData);
Run Code Online (Sandbox Code Playgroud)