Ctypedefと#defineの違い



Difference Between C Typedef



目次

2.1異なる実行時間

  • キーワードtypedefコンパイル段階であるため、コンパイル段階で有効です。typedef型チェック機能
  • #defineマクロ定義であり、前処理段階、つまりコンパイル前に発生します。 シンプルで機械的なストリングの交換のみ 検査なし

2.2機能の違い

  • typedefタイプエイリアスの定義、プラットフォームに依存しないデータタイプの定義、およびstructの組み合わせに使用されます。
  • #defineタイプのエイリアスを作成できるだけでなく、定数、変数、コンパイルスイッチなどを定義することもできます。

2.3異なるスコープ

  • #defineスコープの制限はありません。事前定義されたマクロである限り、将来のプログラムで使用できます。
  • およびtypedef独自のスコープがあります

2.4ポインタの操作

2つがポインタの種類を変更すると、役割は異なります。

#define POINTER int* // #define defines int* as POINTER typedef int* pointer // typedef defines int* as a pointer

複数の変数を定義するために使用する場合、2つの実装が異なるため、効果も異なります。



pointer p1, p2 POINTER p3, p4 int a = 4 p1 = &a // Correct, p1 is a pointer, assign a address to p1 p2 = &a // Correct, p2 is a pointer, assign the address a to p1 p3 = &a // Correct, p3 is a pointer, assign the address a to p1 p4 = &a // Error, p4 is an int variable