C言語のtypedefとdefineの違いは何ですか?

清浅
リリース: 2019-04-04 09:54:08
オリジナル
7910 人が閲覧しました

typedef と define の違いは次のとおりです。define は前処理エディターであり、定義可能なマクロは置き換えられる可能性がありますが、typedef はエディターによって処理され、スコープ規則に従い、定義タイプとして使用できます。 alias

#define は C 命令であり、typedef と同様にさまざまなデータ型を定義するためのエイリアスでもあります。ただし、両者にはまだ違いがあります。次の記事で両者の違いを詳しく紹介します。参照機能もありますので、皆様の参考になれば幸いです。

C言語のtypedefとdefineの違いは何ですか?

##[推奨コース: 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        
 }
ログイン後にコピー

2、マクロ VS タイプ エイリアス

#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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!