質問:
構造体のtypedefについて。
typedefを付けることによって何が良くなったか良く分かりません。
struct a{
int i;
}c1,c2;
struct c1={・・・・};
struct c2={・・・・};
typedef struct a{
int i;
}DATA;
DATA c1={・・・・};
DATA c2={・・・・};
}
この二つの違いは?
structっていうのを何回も書くのが面倒だから型定義するのですか?
答え:
typedefには大きく分けて下の2つの役割があるのではないでしょうか。
1. プログラムを読みやすくする
2. プログラムの移植性を高める
1の例としては、例えば下のような関数へのポインタを受け取る関数があった場合、
int (*)(int, const char *)
typedefしていないと、関数の宣言は
void foo(int (*bar)(int, const char *));
などとなり、読み難いですね。
これを下のようにtypedefすると
typedef int (*bar_func)(int, const char *);
下のように書けるので、読みやすくなります。
void foo(bar_func bar);
2の例としては、例えばint型が16ビットのマシンと32ビットのマシンで
同じプログラムを利用できるように書こうと思ったら、
直接int型を使うことはできません。
代わりにマシン毎に別のtypedefを用意してやり、
例えばu32という型が常に32ビット幅を確保するようにしてやります。
つまり、int型が16ビットのマシンでは32ビットを確保するために
typedef unsigned long u32;
とlongを使い、int型が32ビットのマシンでは
typedef unsigned int u32;
とintを使います。
こうしておけば、プログラムの中でu32と書いたとき
どちらのマシンでも32ビットのデータを格納できます。
他は答える:
この質問・回答は役に立ちましたか?
構造体のtypedefについて。
typedefを付けることによって何が良くなったか良く分かりません。
struct a{
int i;
}c1,c2;
struct c1={・・・・};
struct c2={・・・・};
typedef struct a{
int i;
}DATA;
DATA c1={・・・・};
DATA c2={・・・・};
}
この二つの違いは?
structっていうのを何回も書くのが面倒だから型定義するのですか?
答え:
typedefには大きく分けて下の2つの役割があるのではないでしょうか。
1. プログラムを読みやすくする
2. プログラムの移植性を高める
1の例としては、例えば下のような関数へのポインタを受け取る関数があった場合、
int (*)(int, const char *)
typedefしていないと、関数の宣言は
void foo(int (*bar)(int, const char *));
などとなり、読み難いですね。
これを下のようにtypedefすると
typedef int (*bar_func)(int, const char *);
下のように書けるので、読みやすくなります。
void foo(bar_func bar);
2の例としては、例えばint型が16ビットのマシンと32ビットのマシンで
同じプログラムを利用できるように書こうと思ったら、
直接int型を使うことはできません。
代わりにマシン毎に別のtypedefを用意してやり、
例えばu32という型が常に32ビット幅を確保するようにしてやります。
つまり、int型が16ビットのマシンでは32ビットを確保するために
typedef unsigned long u32;
とlongを使い、int型が32ビットのマシンでは
typedef unsigned int u32;
とintを使います。
こうしておけば、プログラムの中でu32と書いたとき
どちらのマシンでも32ビットのデータを格納できます。
他は答える:
この質問・回答は役に立ちましたか?
ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.