我有一个包含函数hello()的hello.c:
#include <stdio.h>
static void hello() {
printf("hello.\n");
}
现在,我在main.c中有main(),我想从中调用hello()驻留在hello.c中。 我想我必须将一个函数指针从hello.c传递给main.c中的一个函数,但我不知道怎么做到这一点。一个关于如何链接这两个文件的解释的例子会很棒!感谢。
答案 0 :(得分:3)
喜欢这个吗?
<强> hello.h 强>
#ifndef INCLUDED_HELLO_H
#define INCLUDED_HELLO_H
void (*get_hello(void))(void);
// or, better:
// typdef void(*funcptr)(void);
// funcptr get_hello(void);
#endif
<强> 的hello.c 强>
#include "hello.h"
#include <stdio.h>
static void hello(void) {
puts("Hello!");
}
void (*get_hello(void))(void) {
return hello;
}
<强> main.c中 强>
#include "hello.h"
int main(void) {
void(*hello)(void) = get_hello();
hello();
get_hello()();
}
编辑:
正如我非常正确地指出的那样(对不起,我是新来的),这不是完全自我解释的。好吧,令人困惑的位实际上只是语法。我们在这里处理的是函数指针。它们就像它在锡上所说的那样:指向函数的指针,通过它可以调用函数。语法是令人反感的,这就是为什么typedef是你的朋友,但你就是。
hello
中的 main
是一个函数指针变量;它是一个指向函数的指针,该函数不返回任何内容。
get_hello
是一个不带参数的函数,返回一个指向函数的指针,该函数不返回任何参数。类似地,
`int (*foo(double))(float);
将取消一个函数foo取一个double并返回一个指向函数的指针,该函数使用float并返回一个int。
而且,那就是它的全部内容。原则上它非常简单,只有可怕的语法使它看起来很复杂。