我想在Global变量中保存一个指向函数的指针

时间:2010-11-22 20:30:01

标签: c pointers function-pointers

所以我认为这将是直截了当但我不断收到编译错误,这可能意味着我做了一些愚蠢的事情。

所以我使用的是C,我希望在全局变量中保存指向函数的指针。

作为测试用例,我有三个文件。 Test.c,Test.h和FunctionPtr.c

Test.h就像这样

void (*MyCallBack)(void);

int SetFunc( void (*CallBackArg)(void));
void CallFunc();

Test.c就是这样

#include <stdio.h>
#include <stdlib.h>
#include "test.h"
void SetFunc( void (*CallBackArg)(void)){

    printf("Set CallBack\n");
    MyCallBack=CallBackArg;
}

void CallFunc(){
    printf("In Call Func\n");
    MyCallBack();
}

和FunctionTest.c就像这样

#include <stdio.h>
#include <stdlib.h>
#include "test.h"


void MyFunc(){
    printf("Work!\n");
}
int main()
{
    SetFunc(MyFunc);
    CallFunc();

}

当我使用gcc FunctionTest.c test.c test.h -o FunctionTest

进行编译时

我收到以下错误...

test.c:4:错误:'SetFunc'的冲突类型 test.h:4:注意:'SetFunc'的先前声明在这里

我无法弄清楚我做错了什么?也许我没有宣布Global Pointer是对的吗?

2 个答案:

答案 0 :(得分:2)

int SetFunc( void (*CallBackArg)(void));

void SetFunc( void (*CallBackArg)(void))

返回类型不同,这是你的问题。您必须在标头中以与.c文件中相同的方式声明它。

答案 1 :(得分:1)

Test.c让它返回void

void SetFunc( void (*CallBackArg)(void)){

Test.h让它返回int

 int SetFunc( void (*CallBackArg)(void));

据推测,你的意思是虚空,因为它不会返回任何东西