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