質問:
構造体の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のない保証の正しさ.

  • bloodhoundというウイルスに感染したらしく、これが...
  • binファイルってプログラムファイルですか?いじると...
  • IPアドレスや、ホスト名を見ただけで携帯か、PCか...
  • オラクルマスター(どの種類のどの色でも)を独学で取...
  • Visual studio 2005のSQL を使用して簡単なデータベー...
  • 顔文字を辞書に登録したいのですができません。画面...