構造体

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Shera

構造体

#1

投稿記事 by Shera » 18年前

初めまして
夏から勉強を始めたのですが


シューティングの館の4節に

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

BODY_player_t Player;

とありますが
自分で調べたところ、構造体は

struct ~

で書き出すとありましたが

これはどちらで書いても大丈夫と解釈していいんでしょうか?

tk-xleader

Re:構造体

#2

投稿記事 by tk-xleader » 18年前

この場合、structをつけるとエラーになります。なぜなら、structの後に宣言するのはタグ名ですが、
typedef struct{…
の書き方の場合は、タグ名のない構造体型に、名前をつけているという意味になるので、
structをつけずに宣言するのです。

box

Re:構造体

#3

投稿記事 by box » 18年前

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

これは、x, y, status, counter, そしてshotというメンバーを持つ
構造体に、BODY_player_tという別名を付けている、という意味です。
これ以降は、くだんの構造体をBODY_player_t型として扱えるようになります。

> BODY_player_t Player;

これが、BODY_player_t型の変数Playerの定義です。

Shera

Re:構造体

#4

投稿記事 by Shera » 18年前

お早い返信ありがとうございます
あのあと typedef
について調べたところ

>>構造体では、頭に「struct」が付くのでどうしても型名が長くなります。そのため、構造体の宣言を簡潔にするために、typedef は非常に多く用いられます

とありました

また上のお二方の内容からしますと
4節の記述は

typedef struct 以降の {} のなかの内容は =BODY_player_t Player

であっているんでしょうか?

tk-xleader

Re:構造体

#5

投稿記事 by tk-xleader » 18年前

要は、構造体とはプログラミングをする人が作る新たな型なのです。その型の名前を、typedefで
つけるということなので、ほぼ同意としてもあまり問題は起きません。もっと簡単に言うと、

typedef int seisuu; /*整数の型であるint型にseisuuという名前をつけている*/

これはあまりよくない例です。しかし、seisuuというのはこの時点でintというのと同義になります
構造体の中身も型なので、=としてもさほど問題は起きないと思います。

toyo

Re:構造体

#6

投稿記事 by toyo » 18年前

typedefは構造体以外でも結構使われています
typedef 型 別名;
の様に書きます
Windowsでも
typedef unsigned long DWORD;
typedef int BOOL;
typedef unsigned char BYTE;
など型定義がされています。
型の部分には構造体も使えるので
typedef struct タグ名{ } 別名;
と書けます。
typedefの場合は構造体タグ名を省略できるのでご質問の部分の書き方になっています。
使用目的はやはりタイプ量を減らせるというのが大きいですね

たかぎ

Re:構造体

#7

投稿記事 by たかぎ » 18年前

構造体の場合は typedef を使っても害は少ないのですが、整数型の typedef はあまり乱用しない方がいいですよ。
というのも、typedef 名にしてしまうと本来の型が一見しただけではわからなくなるので、整数拡張や通常の算術型変換の振る舞いが把握しづらくなるからです。

C++ の場合はもっと顕著で、多重定義やテンプレートがどう解決されるのか、ソースを少し見ただけでは分からなくなってしまいます。実際の型に依存しないように、正しくコーディングされているならよいのですが、そんなことは稀ですから。

tk-xleader

Re:構造体

#8

投稿記事 by tk-xleader » 18年前

>C++ の場合はもっと顕著で、多重定義やテンプレートがどう解決されるのか、ソースを少し見ただけでは分からなくなってしまいます。実際の型に依存しないように、正しくコーディングされているならよいのですが、そんなことは稀ですから。

もしかしてtemplate機能においてtypedefした型をtypedefごとに生成するコンパイラはありませんよね?

Shera

Re:構造体

#9

投稿記事 by Shera » 18年前

皆さん、詳しい回答をありがとうございます

またなにかわからないことがあればお聞きすると思いますので
そのときはよろしくお願いします

たかぎ

Re:構造体

#10

投稿記事 by たかぎ » 18年前

> もしかしてtemplate機能においてtypedefした型をtypedefごとに生成するコンパイラはありませんよね?

ありません。

tk-xleader

Re:構造体

#11

投稿記事 by tk-xleader » 18年前

それはさすがに無茶でした。

閉鎖

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