我将表明我的意思:
头:
#ifndef _HASH_H_
#define _HASH_H_
typedef void* pKey;
typedef int (*HashFunc) (pKey key, int size);
#endif
新标题:
#ifndef _DICT_H_
#define _DICT_H_
#include "hash.h"
HashFunc HashWord;
#endif
现在这里我不知道写什么,我想写HashWord
函数本身
c文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hash.h"
#include "dict.h"
typedef struct _wordElement {
char* word;
char* translation
} wordElement, *pwordElement;
HashFunc HashWord{
......... here i will want to write the Code
}
现在它给了我一个错误,我应该怎么写最后一行?
也许
HashFunc HashWord(pKey theKey,int number){...}
也许
HashFunc HashWord( theKey, number){...}
也许
int HashWord (pKey key, int size){...}
什么是正确的方法?
答案 0 :(得分:5)
我想编写HashWord函数本身
但是HashWord
不是函数,它是函数指针。定义与函数指针HashFunc
的签名匹配的函数,并为函数的地址分配HashWord
。例如:
int HashFunc_1 (pKey key, int size)
{
return 0;
}
int HashFunc_2 (pKey key, int size)
{
return 0;
}
pKey k = ...;
HashWord = HashFunc_1;
HashWord(k, 4);
HashWord = HashFunc_2;
HashWord(k, 4);
答案 1 :(得分:3)
你写的是一个指向函数
的指针的类型int func (pKey key, int size);
你可以做的是宣布一个
int func (pKey key, int size)
{
// do your stuff
}
然后
HashFunc HashWord = func;
答案 2 :(得分:1)
再次阅读typedef
关键字:Type
+ Define
- 定义类型。函数不是C中的类型,当你像你一样创建typedef
时,你定义了一个函数指针类型。然后,您可以创建此类型的变量并将其分配给它。
答案 3 :(得分:0)
在C中无法做到这一点,即定义一个与typedef
ed函数类型匹配的函数。
您只需手动定义函数以匹配类型,即
int HashWord(pKey key, int size)
{
...
}
提高这一点的一种方法是让API提供一个执行函数头的宏,这样API的用户就可以确定他们做的是正确的事情。当然,为函数头引入一个宏也会使它模糊不清,这并不总是非常令人愉快。
宏解决方案可能如下所示:
#define DEF_HASH_FUNC(name, key, size) int name(pKey key, int size)
然后你可以像这样使用它:
DEF_HASH_FUNC(HashWord, key, size)
{
...
}
当然,您也可以“折叠”参数名称key
和size
,但这会使其更加模糊。