如何正确初始化函数指针

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并不是一个好主意(前提是不是错别字)