ここから本文です

struct と typedef structで構造体を宣言した場合、何が違うのでしょう

ichimanniさん

2011/1/3115:40:19

struct と typedef structで構造体を宣言した場合、何が違うのでしょう

閲覧数:
114,787
回答数:
3

違反報告

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

編集あり2011/1/3115:55:56

使用言語が明記されてないからC言語の話として話を進めるな。

まず、

struct hoge{
int x;
int y;
};

こんな風に構造体を宣言すると、そのデータは
「struct hoge」というデータ型として定義される。

これ使って変数を定義するときは、

struct hoge hensuu;

こんな感じになる。


んで、typedefの方は、

typedef int hoge;

こんな風に宣言して、int型にhoge型という別名を付ける命令になる。


この二つを組み合わせると、

typedef struct hoge{
int x;
int y;
} hoge_t;

こんな感じになって、「struct hoge」型のデータ型に「hoge_t」という別名を付けてあげることになる。
もうちょっと短縮して、

typedef struct{
int x;
int y;
} hoge_t;

こんな書き方もできるな。
これなら、変数定義するときに、

hoge_t hensuu;
とするだけで良い。


まぁはっきり言って、データ型の名前が変わるだけで処理内容自体に違いは無い。
ただ、構造体を普通に作った時は、データ型の頭に「struct 」ってのが絶対に付いちゃうから、
それが煩わしいってことでtypedefで別名付けちゃうことが多い。


ちなみに、C++の場合はもうちょっと賢くて、

struct hoge{
int x;
int y;
};

とすると、「struct hoge」と「hoge」のデータ型が一度に作られる。
C++の場合はtypedef使って構造体宣言する必要はあんまりないな。

この質問は投票によってベストアンサーに選ばれました!

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

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

vivioman123さん

編集あり2011/1/3120:11:05

なにも違わない。

typedefすると、構造体型の名前が直感的に分かるかたちに変更できるのでソースコードの可読性が向上する。

と言われてるが両論ある。
(変数の名前付けルールにもよるが)typedefするとその変数が「何の型でどういう使われかたする」のか隠蔽されてしまう。だからtypedef禁止って場合もあったなぁ。

apaaontsさん

2011/1/3118:51:30

構造体宣言ついでに、型として宣言するかしないかの違いですね。
できあがるコードに違いはないはず。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。