ページ 11

typedefについて

Posted: 2013年8月29日(木) 16:02
by サイクロン
typedefの使い方がわかりません。
http://www.geocities.jp/ky_webid/Progra ... t/003.html
このサイトを見ていた時に

コード:

typedef void (*cmd_func)(void);
という文がありました。

コード:

typedef int a;
と書くと,

コード:

a b;

コード:

int b;
になることはわかるのですが、
これは

コード:

(*cmd_func)(void) a;
と書くと

コード:

void a;
になるということでしょうか?
絶対に違うと思うのですが、
それ以外の使い方がググっても出てきません。
どういう意味になるのか教えてください。
よろしくおねがいします。

Re: typedefについて

Posted: 2013年8月29日(木) 16:24
by Blue
関数の型宣言ですね。

コード:

typedef void (*cmd_func)(void);
は、引数なしの戻り値なしの関数の型名をcmd_funcとするように宣言しています。

一例ですが、typedefなしでやろうとすると

コード:

#include <stdio.h>

int add(int x, int y) { return x + y; }
int sub(int x, int y) { return x - y; }

int main()
{
	int x = 1, y = 2, z;
	int (*calc)(int, int);

	calc = add;
	z = (*calc)(x, y);
	printf("z = %d\n", z);

	calc = sub;
	z = (*calc)(x, y);
	printf("z = %d\n", z);

	return 0;
}

コード:

int (*calc)(int, int);
という書き方になります。

typedefを使うと

コード:

typedef int (*CALC)(int, int);

コード:

CALC calc;
とちょっとだけ可読性が上がったりします。
(キャストするケースもあったりしますが)

「関数ポインタ」でWeb検索してみると参考になるかもしれません。

Re: typedefについて

Posted: 2013年8月29日(木) 17:04
by サイクロン
解決しました。
Blueさんありがとうございました。