C typedef的功能,使用方法 - 简单的例子

时间:2014-12-19 11:25:51

标签: c function typedef

我将表明我的意思:

头:

#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){...}

什么是正确的方法?

4 个答案:

答案 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)
{
  ...
}

当然,您也可以“折叠”参数名称keysize,但这会使其更加模糊。