问题描述
我想为一个函数创建一个指针,并创建一个函数来初始化该指针。我是C语言的新手,找不到我的问题的例子。
我做了什么:
myFile.c:
#include "myFile.h"
void (*PT_MyFunction)(int,bool) = NULL;
void MyFunction (int a,bool b)
{
if (PT_MyFunction != NULL)
return (*PT_MyFunction)(a,b);
}
void SetPt (void (*pt)(int,bool))
{
PT_MyFunction = pt;
}
myFile.h:
extern void MyFunction (int,bool);
void SetPt (void*(int,bool));
我在stdlib.h
中有错误,无法修复。我做错了什么?
编辑:
我有很多错误stdlib.h: error: storage class specified for parameter 'XXX'
。 XXX
是此文件中的变量。
如果我在myFile.h中注释行void SetPt (void*(int,bool));
,则没有错误。我的标题一定是错误的,但我不知道如何解决。
解决方法
在源文件中
void (*PT_MyFunction)(int,bool) = null;
您可能想要:
void (*PT_MyFunction)(int,bool) = NULL;
或者只是
void (*PT_MyFunction)(int,bool);
因为作为全局变量,默认情况下会初始化为0 / NULL
在头文件中
void SetPt (void*(int,bool));
必须为(无需命名参数):
void SetPt (void(*)(int,bool));
,
这些函数声明中的参数类型
void SetPt (void (*pt)(int,bool))
{
PT_MyFunction = pt;
}
和
void SetPt (void*(int,bool));
不同。
第一个函数声明接受指向void( int,bool )
类型的函数的指针。
第二个函数声明接受指向void *( int,bool )
类型的函数的指针。
看来您的意思是以下声明
void SetPt (void (* )(int,bool));
或者只是
void SetPt (void(int,bool));
在函数定义内
void MyFunction (int a,bool b)
{
if (PT_MyFunction != NULL)
return (*PT_MyFunction)(a,b);
}
无需取消引用函数指针。您可以不使用return语句进行编写(因为该函数的返回类型为void
)
PT_MyFunction(a,b);
请注意,将标准宏NULL
重定义为null
(不是错字)不是一个好主意。