Menu

Category

Archive

logo


typedef を使用して複雑な宣言を簡単にする

2014-06-07 18:00:00 +0900
  • このエントリーをはてなブックマークに追加

以前 紹介した、複雑な C 言語のおける宣言を少し簡略にすることができる方法のメモ。

まずは、このコード。

 1 unsigned int RSHash  (const char *key, int size);
 2 unsigned int DEKHash (const char *key, int size);
 3 unsigned int DJBHash (const char *key, int size);
 4 
 5 unsigned int (*hashList[4])(const char *, int) =
 6  {RSHash, DEKHash, DJBHash, NULL};
 7 
 8 unsigned int (**mover)(const char *key, int size);
 9 
10 mover = hashList

最初の 3 行は関数の宣言です。 3 つのハッシュ関数があります。2 つ目の hashList は、この関数へのポインタの配列です。関係ないですが、最後の mover は、この配列へのポインタです。

そして、こんな感じに関数へのポインタを返す関数を書きたいとします。

1 unsigned int (*hash)(const char *, int);
2 
3 hash = selectHash(3, hashList);

普通に書くとこんな感じになります。

1 unsigned int (*selectHash(
2       int n,
3       unsigned int (*hashList[])(const char *, int)))
4 (const char *, int)
5 {
6   return hashList[rand() % n];
7 }

ちょっときついので、これを typedef を使用して書くとだいぶ楽になる。

1 typdef unsigned int HASHFNCT(const char *, int);
2 
3 HASHFNCT *selectHash(int n, HASHFNCT *hashList[])
4 {
5   return hashList[rand() % n];
6 }