typedefについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
サイクロン
記事: 6
登録日時: 12年前

typedefについて

#1

投稿記事 by サイクロン » 12年前

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

Blue

Re: typedefについて

#2

投稿記事 by Blue » 12年前

関数の型宣言ですね。

コード:

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検索してみると参考になるかもしれません。

サイクロン
記事: 6
登録日時: 12年前

Re: typedefについて

#3

投稿記事 by サイクロン » 12年前

解決しました。
Blueさんありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る