ここから本文です

解決済みの質問

typedef void (xxx)(void) typedef xxx * (call)(void)

tyattojinnさん

typedef void (xxx)(void)
typedef xxx * (call)(void)

void (* start(void))(void)
{
return (xxx*)start_1;
}

void (* start_2(void))(void)
{
return (xxx*)start_2;
}

C言語です
上記ってどういうことがしたいのですか?
特にtypedefのところ。
callって??
プログラムの一部なので、推測してください。

違反報告

ベストアンサーに選ばれた回答

miegumさん

typedef は型に別名を与えるものです。

typedef int HOGE;

とした場合、

int aaa;
HOGE bbb;

は同じ意味になります。


さて、質問の内容ですが。
typedef void (xxx)(void)
これは、戻り値にvoid型、引数にvoid型を持つ関数型にxxxという別名を与えています。
typedef xxx * (call)(void)
これは、xxx型のポインタ型にcallという別名を与えています。

ですから、
xxx *hoge;
call foo;
という風に宣言することも出来ますし、上記の2行は同じ意味を持ちます。

また、下記のような関数があった場合。

void Function(void)
{
printf("Function!!");
}

hoge = Function;
foo = Function;
というように関数を代入することも出来ます。

ポインタを経由して代入した関数を呼び出す場合は、
(*hoge)();
(*foo)();
とします。


使い道は結構ありますよ。

質問した人からのコメント

  • ありがとうございます
  • コメント日時:2009/10/19 23:12:49

グレード

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 2点(5点満点中)2人が役に立つと評価しています。

ベストアンサー以外の回答

(1件中1〜1件)

 

wiseman_65535さん

typedef void (xxx)(void)
引数なし、戻り値なしの関数という型をxxxとする
typedef xxx * (call)(void)
引数なし、xxxのアドレスを返す関数という型をcallとする

あとは、自身の関数のアドレスを返す関数を定義している…が、どういう使い道があるのか想像できないですね。

この質問に付けられたタグ

タグとは

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

ただいまの回答者

21時55分現在

4103
人が回答!!

1時間以内に7,634件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する