ページ 11

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

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

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

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

Posted: 2009年8月28日(金) 01:08
by tk-xleader
typedef int sample;
で、intがstruct _WNDCLASSEXに、sampleがWNDCLASSEXと*PWNDCLASSEXになっているのですが、同時に構造体の定義をしているので分かりにくくなっています。
ちなみに、sampleに*をつけるとsample=int*になります、コンマで区切って複数の違う名前をつけることもできます。

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

Posted: 2009年8月28日(金) 01:12
by たかぎ
typedefは、意外かもしれませんが、staticやexternと同じ記憶クラス指定子です。
ですので、

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

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

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

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

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

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

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

Posted: 2009年8月28日(金) 10:56
by uwlover
解決マークを忘れてました…

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

Posted: 2009年8月28日(金) 12:31
by 初級者
int *p = &a;

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