掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24360

関数プロトタイプのtypedefの使用方法
投稿者---zero(2005/11/25 20:07:28)


例えば、以下のように宣言されていた場合、意味としては次のようになるのでしょうか?

typedef void (*list_destroy_t) (void *);

「list_destroy_tは、戻り値はなく(void)、引数にvoid型のポインタを取る、
関数へのポインタである」、と言うことをtypedefで宣言しているのでしょうか?

このようにしておく利点として、例えば、関数引数に、戻り値は、void型で、引数にvoid型
のポインタをとるような関数を書きたい場合、単に以下のように書けばいい,

int sample_function(list_destroy_t func) {

}

というような使い方ができ、見た目がスッキリできる事が利点なんだと思うのですが。
確かsignal(2)でもtypedefを使ってスッキリ書式が書かれていたのを目にした
記憶があるのですが、、。

上記に書いた事が、あっているのかどうなのか、はっきりしないため質問させて頂きました。
ご教授のほどよろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:関数プロトタイプのtypedefの使用方法 24361 気分屋 2005/11/25 21:11:35


No.24361

Re:関数プロトタイプのtypedefの使用方法
投稿者---気分屋(2005/11/25 21:11:35)


私はゲームで飯を食っている人間なのですが
私がゲームで関数ポインタを使用する場合は、下記の使い方をします。

#include <stdio.h>

// ----------------------------------
// プロトタイプ宣言
void TaskInit( void );    // 初期化
void TaskTitle( void );   // タイトル


typedef void (*GAME_JP)( void );

// ----------------------------------
// グローバル変数
unsigned long game_mode = 0;
GAME_JP jump[] = 
{
    TaskInit,
    TaskTitle,
};

// メイン
void main( void )
{
    while( 1 ) {
        jump[ game_mode ] ( );
    }
}

// 初期化
void TaskInit( void )
{
    // 初期化処理
}

// タイトル
void TaskTitle( void )
{
    // タイトル処理
}



この他に関数ポインタを使用したことがないので
正しい使い方かどうかはわかりませんが、ご参考までにと思いました。


この投稿にコメントする

削除パスワード

No.24362

Re:関数プロトタイプのtypedefの使用方法
投稿者---zero(2005/11/25 21:46:07)


気分屋さん返信ありがとうございます。

もう3年ほどC言語を用いてプログラミングをしていますが、こういったtypedefと関数ポインタ
の使い方もあるんだなあと、関心しました。

有益なサンプルソースをありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧