也许他们想听听功能指针?
您可以创建指向该函数的指针,并使用该指针调用它.
这是合理的一种可能情况是,如果你有一个你不想被所有人调用的回调函数,你将指针作为某个register_callback函数的参数.
回调函数被广泛使用,例如让GUI API的用户提供按下按钮时应该发生的代码.现在,对于面向对象的语言,更常见的是对类进行子类化并定义或覆盖方法,例如Android View类和方法OnClickListener,但C#委托与C函数指针非常相似.
为了说明原理,这里是某种类型的源代码(原始问题中的文件"B"),其中主要组件是do_stuff函数:
#include <stdio.h>
#include "some_library.h"
void (*stored_callback)(void) = NULL;
void register_callback(void (*callback)(void)) {
stored_callback = callback;
}
void do_stuff(void) {
printf("Doing stuff...\n");
printf("Calling callback...\n");
if (stored_callback != NULL)
stored_callback();
}
Run Code Online (Sandbox Code Playgroud)
此标头some_library.h文件显示该库的API:
extern void register_callback(void (*callback)(void));
extern void do_stuff(void);
Run Code Online (Sandbox Code Playgroud)
这里是如何使用库(问题中的文件"A"):
#include <stdio.h>
#include "some_library.h"
static void my_callback(void) {
printf("Inside the callback!\n");
}
int main(void) {
register_callback(my_callback);
do_stuff();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的采访答案是"你做不到".
(因为问题说"在文件B中你想使用这个静态函数"并且它没有说你被允许修改文件A.)
| 归档时间: |
|
| 查看次数: |
387 次 |
| 最近记录: |