如何正确初始化函数指针
How to correctly initialise function pointer
我想为一个函数创建一个指针并创建一个函数来初始化这个指针。我是 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));
我没有错误。我的 header 一定是错了,但我不知道如何修正它。
在源文件中
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 语句来编写(因为该函数具有 return 类型 void
)
PT_MyFunction(a, b);
注意,将标准宏NULL
重新定义为null
并不是一个好主意(前提是不是错别字)
我想为一个函数创建一个指针并创建一个函数来初始化这个指针。我是 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));
我没有错误。我的 header 一定是错了,但我不知道如何修正它。
在源文件中
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 语句来编写(因为该函数具有 return 类型 void
)
PT_MyFunction(a, b);
注意,将标准宏NULL
重新定义为null
并不是一个好主意(前提是不是错别字)