将 typedef 函数指针作为参数传递问题
Passing typedef function pointer as an argument problem
我只是不知道 typedef 函数指针是如何传递给
下面的 "uniqueOrderedListCreate" 函数,我所知道的是当我们声明一个函数指针的类型定义时,我们需要在作为参数传递时添加一个参数,例如:
UniqueOrderedList uniqueOrderedListCreate(copyElements a, freeElements b,
elementsEquals c, elementGreaterThan d);
我是不是理解错了什么?
#ifndef UNIQUEORDEREDLIST_H_
#define UNIQUEORDEREDLIST_H_
#include <stdbool.h>
typedef struct uniqueOrderedList_t* UniqueOrderedList;
typedef void* Element;
typedef Element (*copyElements)(Element);
typedef void (*freeElements)(Element);
typedef bool (*elementsEquals)(Element, Element);
typedef bool (*elementGreaterThan)(Element e1, Element e2);
UniqueOrderedList uniqueOrderedListCreate(copyElements, freeElements,
elementsEquals, elementGreaterThan);
中不需要给出函数参数名称
UniqueOrderedList uniqueOrderedListCreate(copyElements, freeElements,
elementsEquals, elementGreaterThan);
这只是声明了一个名为 uniqueOrderedListCreate
的函数,它接受四个指定类型的未命名参数和 return 个 UniqueOrderedList
。给出函数定义的地方,必须给参数起名:
UniqueOrderedList uniqueOrderedListCreate(copyElements a, freeElements b,
elementsEquals c, elementGreaterThan d)
{
/* ... */
}
也没有要求声明中给出的名称与定义中给出的名称相匹配。只有函数的签名(return 类型和参数类型)需要匹配。
我只是不知道 typedef 函数指针是如何传递给 下面的 "uniqueOrderedListCreate" 函数,我所知道的是当我们声明一个函数指针的类型定义时,我们需要在作为参数传递时添加一个参数,例如:
UniqueOrderedList uniqueOrderedListCreate(copyElements a, freeElements b,
elementsEquals c, elementGreaterThan d);
我是不是理解错了什么?
#ifndef UNIQUEORDEREDLIST_H_
#define UNIQUEORDEREDLIST_H_
#include <stdbool.h>
typedef struct uniqueOrderedList_t* UniqueOrderedList;
typedef void* Element;
typedef Element (*copyElements)(Element);
typedef void (*freeElements)(Element);
typedef bool (*elementsEquals)(Element, Element);
typedef bool (*elementGreaterThan)(Element e1, Element e2);
UniqueOrderedList uniqueOrderedListCreate(copyElements, freeElements,
elementsEquals, elementGreaterThan);
UniqueOrderedList uniqueOrderedListCreate(copyElements, freeElements,
elementsEquals, elementGreaterThan);
这只是声明了一个名为 uniqueOrderedListCreate
的函数,它接受四个指定类型的未命名参数和 return 个 UniqueOrderedList
。给出函数定义的地方,必须给参数起名:
UniqueOrderedList uniqueOrderedListCreate(copyElements a, freeElements b,
elementsEquals c, elementGreaterThan d)
{
/* ... */
}
也没有要求声明中给出的名称与定义中给出的名称相匹配。只有函数的签名(return 类型和参数类型)需要匹配。