所以我认为这将是直截了当但我不断收到编译错误,这可能意味着我做了一些愚蠢的事情。
所以我使用的是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是对的吗?
答案 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));
据推测,你的意思是虚空,因为它不会返回任何东西