ページ 11

構造体について

Posted: 2009年4月14日(火) 17:09
by situmon
typedef struct{ 
    double x,y; 
    int status,counter; 
    int shot [11][15]; 
} BODY_player_t; 

BODY_player_t Player;

これと
typedef struct{
        int x,y,img;
}ch_t;
はどう違うのでしょうか?
一つ目はなぜ上にはBODYがつくのか?
二つ目はなぜ下にBODY_player_t Player; という記述がしてあるのか?
です。
また上を
typedef struct{ 
    double x,y; 
    int status,counter; 
    int shot [11][15]; 
} player_t;
だけにしてはいけないのでしょうか?

初歩的な質問ですが、これはC言語の本には書いてなかった気がしたので、

すいません・・・

Re:構造体について

Posted: 2009年4月14日(火) 17:17
by box
> typedef struct{ 
>     double x,y; 
>     int status,counter; 
>     int shot [11][15]; 
> } BODY_player_t; 
> 
> BODY_player_t Player; 

ここまでの記述は、

double型のメンバーx,y
int型のメンバーstatus,counter,shot[11][15]
を持つ構造体に、
BODY_player_t
という別名を付けた。つまり、intやcharなどと同様に、
BODY_player_t
という型があるものとして扱える。

そして、
BODY_player_t型の変数Playerを定義した。

という意味を持ちます。

> typedef struct{
>         int x,y,img;
> }ch_t;

この記述は、
int型のメンバーx,y,img
を持つ構造体に、
ch_t
という別名を付けた、というところまでです。
ch_t型の変数は、まだ定義していません。

> 一つ目はなぜ上にはBODYがつくのか?

そういう名前にした方がわかりやすい、と命名者が思ったからでありましょう。

> typedef struct{ 
>     double x,y; 
>     int status,counter; 
>     int shot [11][15]; 
> } player_t; 

> だけにしてはいけないのでしょうか?

問題ありません。名前の付け方だけの話です。
構造体の名前を付ける際、BODYを付けなければならないというような
決まりはありません。
プログラム全体で一意でありさえすれば、どういう名前でもかまいません。

Re:構造体について

Posted: 2009年4月14日(火) 17:36
by situmon
どうもありがとうございました。
名前の問題だったんですね。
大文字で書いてあるとなんか不思議な感じがしたので、
もやもやが解決したのでうれしかったです。
boxさん、ありがとうございました!

Re:構造体について

Posted: 2009年4月14日(火) 17:51
by SooA
typedef struct{ 
    double x,y; 
    int status,counter; 
    int shot [11][15]; 
} [color=#bbffbb>BODY_player_t[/color]; 

BODY_player_t Player; 

>一つ目はなぜ上にはBODYがつくのか?
[color=#bbffbb>BODY_player_t[/color]の部分は
タグ名と呼び、BODY_player_tという新しい型が定義されます。
タグの名称はプログラマーのセンスによって変わるので、
BODYという記述自体に特別な意味があるわけではありません。
(言葉の持つ意味としては Body:体、本体、メイン部分 )


>二つ目はなぜ下にBODY_player_t Player; という記述がしてあるのか?
構造体 Player を宣言しています。
[color=#bbffbb>BODY_player_t[/color]は型です。
例えば int Player; の int の部分に相当します。
ch_t型も別の場所でch_t型を使用するために宣言で使用されているはずですよ。


>また上を(略)だけにしてはいけないのでしょうか?
上の説明でもう解ると思いますが、
名称は個人のセンスで決まります。
プログラムを読みやすくするために、
タグ名とその変数だと区別できる
名称にしておくと良いですよ。

Re:構造体について

Posted: 2009年4月14日(火) 17:53
by situmon
追加の情報ありがとうございます!

Re:構造体について

Posted: 2009年4月14日(火) 21:47
by non
>BODY_player_tの部分は
>タグ名と呼び、BODY_player_tという新しい型が定義されます。

これも、タグ名って呼ぶのは間違いありませんか?
調べたけど、わからなかったので。。。

Re:構造体について

Posted: 2009年4月14日(火) 22:34
by box
> これも、タグ名って呼ぶのは間違いありませんか?

typedef名というのが正しいようです。
少なくともタグ名ではありません。

(構造体)タグとは、

struct XXX {
	/* ここにメンバーを定義する */
} YYY;

や

typedef struct XXX {
	/* ここにメンバーを定義する */
} ZZZ;

と書いたときの「XXX」のことです(省略可能)。

Re:構造体について

Posted: 2009年4月14日(火) 23:17
by SooA
訂正ありがとうございます。
boxさんの書いているように XXX の部分ですね。
ずっと間違えて覚えてました@@;