Menu

Category

Archive

logo


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

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

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

まずは、このコード。

1
2
3
4
5
6
7
8
9
10
unsigned int RSHash  (const char *key, int size);
unsigned int DEKHash (const char *key, int size);
unsigned int DJBHash (const char *key, int size);

unsigned int (*hashList[4])(const char *, int) =
	{RSHash, DEKHash, DJBHash, NULL};

unsigned int (**mover)(const char *key, int size);

mover = hashList

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

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

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

hash = selectHash(3, hashList);

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

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

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

1
2
3
4
5
6
typdef unsigned int HASHFNCT(const char *, int);

HASHFNCT *selectHash(int n, HASHFNCT *hashList[])
{
	return hashList[rand() % n];
}