typedefについてちゃんとした理解を

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

typedefについてちゃんとした理解を

#1

投稿記事 by uwlover » 16年前

typedef文について勉強しているのですが、次のようなコードについて質問があります。(このコードが入っていたプログラムは長すぎるのでカットします)
typedef struct _WNDCLASSEX {
中略
} WNDCLASSEX, *PWNDCLASSEX;

これは次のように読めばいいのでしょうか?すなわち、
構造体_WNDCLASSEX型を宣言してその内容を定義し、同時にtypedefによって_WNDCLASSEX型を指すのにWNDCLASS
EXと*WNDCLASSEXを使うことができるようにする、という感じです。
typedefはtypedef int sample のような形でしか今まで見たことがなく、自分の書籍ではtypedefについて詳細
には触れていないので…ネット上でもこの話題に触れているものがまだ見つかってません。

tk-xleader

Re:typedefについてちゃんとした理解を

#2

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

typedef int sample;
で、intがstruct _WNDCLASSEXに、sampleがWNDCLASSEXと*PWNDCLASSEXになっているのですが、同時に構造体の定義をしているので分かりにくくなっています。
ちなみに、sampleに*をつけるとsample=int*になります、コンマで区切って複数の違う名前をつけることもできます。

たかぎ

Re:typedefについてちゃんとした理解を

#3

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

typedefは、意外かもしれませんが、staticやexternと同じ記憶クラス指定子です。
ですので、

typedef struct tag_A { ... } A, *PA;

と書いた場合、(staticやexternなどでは)変数にあたるAとPAが定義された型名になります。

static struct tag_A { ... } a, *pa;

とした場合のaやpaがどんな型なのかが理解できるのであれば、typedefでもそれと同じように読み解けばよいのです。

uwlover

Re:typedefについてちゃんとした理解を

#4

投稿記事 by uwlover » 16年前

ご回答ありがとうございます。やはり構造体定義とtypedefを同時にやっているということだったのですね。
何と言うか、int *p = &aのようなややこしさを感じますね(普通*pはアドレスの内容を指すので、こう初期化
しているとまるで値を格納すべきところにアドレスを入れているように見えますから)

uwlover

Re:typedefについてちゃんとした理解を

#5

投稿記事 by uwlover » 16年前

解決マークを忘れてました…

初級者

Re:typedefについてちゃんとした理解を

#6

投稿記事 by 初級者 » 16年前

int *p = &a;

p に、a のアドレスという値を格納しているに過ぎません。

閉鎖

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