typedef と define の違いは次のとおりです。define は前処理エディターであり、定義可能なマクロは置き換えられる可能性がありますが、typedef はエディターによって処理され、スコープ規則に従い、定義タイプとして使用できます。 alias
#define は C 命令であり、typedef と同様にさまざまなデータ型を定義するためのエイリアスでもあります。ただし、両者にはまだ違いがあります。次の記事で両者の違いを詳しく紹介します。参照機能もありますので、皆様の参考になれば幸いです。
##[推奨コース: C 言語チュートリアル ]
1. プリプロセッサ VS コンパイラ##defineプリプロセッサによって決定されます。プロセッサによって処理され、#define 値を定義時点から使用時点までコピーして貼り付けます。 Typedef はコンパイラによって処理され、新しい型の実際の定義です。制御がコンパイラに到達するまでに、すべての #define が置き換えられます。
違いの影響
(1) typedef はセミコロンで終わる必要がありますが、#define はセミコロンで終わるべきではありません
(2) #define での置換の副作用がある可能性があります。例:
typedef char * string_t; #define string_d char * string_t s1,s2; // s1和s2都是char *类型 string_d s3,s4; // s3是char *但是s4的类型是char(而不是char *)
2 番目の宣言の問題は、プリプロセッサがそれを
char * s3,s4;
に置き換えることです。これは、s3 がchar* 型ですが、 s4 は char 型になります。すべての変数をポインター型にしたい場合は、すべての変数で *
(3) typedef を指定する必要があります。スコープ規則に従います。つまり、新しい型がスコープ (関数内) で定義されている場合、そのスコープが存在する場合にのみ新しい型名が表示されます。ただし、プリプロセッサが #define に遭遇すると、すべての出現箇所が置き換えられます (その後のスコープ ルールはありません)。例:
int main (){ { //新范围开始 typedef int myInt_t; #define myInt_d int myInt_t a; // a的类型为int myInt_d b; // b的类型为int } //新范围结束 myInt_t c; //错误,输入myInt_t未找到 myInt_d d; //d的类型为int }
#define はマクロの定義にも使用できますが、typedef はマクロに新しい名前を指定するためにのみ使用できます。既存のタイプ (新しいタイプを作成することはできません)。同様に、#define を使用して変数
#define N 10
を定義できます。これは実際には N を定義しませんが、コード全体で N を 10 に置き換えます。したがって、名前付き定数に使用できます。 typedef は定義された型に新しい名前のみを提供できます
3. typedef を型の別名として使用します一部の型定義は typedef を使用してのみ定義でき、#define は使用できません意味。例:
(1) サイズ 10 の整数配列に新しい名前を割り当てます。
typedef int arr [ 10 ] ;
(2) 構造体型
typedef struct { int a; char b; } myType;
に新しい名前を割り当てます。 要約:以上がこの記事の全内容です。皆様のお役に立てれば幸いです。
以上がC言語のtypedefとdefineの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。