時には、コードの移植性とクロスプラットフォーム開発、または書き込みの文字を短縮するために、タイプの名前変更のための使用のtypedefするためです。
typedef
効果
既存のデータ型の名前のカスタム名を持ちます。
それは以下のように定義されています。
データ型名のtypedef。
使用
メモリを容易にするために、以下のステップのようにまとめることができます
-
変数の型の既存の定義との最初の
-
型定義文は、typedefを追加する前に
-
カスタム名に変数名
-
最後に、セミコロンがなければなりません。
次の手順を参照してください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int TYPE32;
typedef int ARRAY[10];
typedef char *POINTER;
typedef char *POINTERARRAY[3];
int main()
{
TYPE32 a = 10;
ARRAY arr = {1,2,3,4,5,6,7,8,9,10};
POINTER ps= "123";
POINTERARRAY pt= {"123","456","789"};
printf("sizeof(TYPE32) = %d\n",sizeof(TYPE32));
printf("sizeof(ARRAY) = %d\n",sizeof(ARRAY));
printf("sizeof(POINTER) = %d\n",sizeof(POINTER));
printf("sizeof(POINTERARRAY) = %d\n",sizeof(POINTERARRAY));
putchar(10);
printf("a = %d\n",a);
putchar(10);
for (int i = 0;i<sizeof(arr)/sizeof(arr[0]);i++)
printf("arr[%d] = %d\n",i,arr[i]);
putchar(10);
printf("a = %s\n",ps);
putchar(10);
for (int i = 0;i<sizeof(pt)/sizeof(pt[0]);i++)
printf("arr[%d] = %s\n",i,pt[i]);
return 0;
}
結果は以下のとおりです。
sizeof(TYPE32) = 4
sizeof(ARRAY) = 40
sizeof(POINTER) = 4
sizeof(POINTERARRAY) = 12
a = 10
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
arr[5] = 6
arr[6] = 7
arr[7] = 8
arr[8] = 9
arr[9] = 10
a = 123
arr[0] = 123
arr[1] = 456
arr[2] = 789
主に上のtypedef配列。混同してはいけません。
#define
効果
#defineの形式を使用して、唯一の前処理段階でテキストを置き換えます。
ソーステキスト置換テキストの#define
時々のtypedefとの#defineの役割は同じになりますが、時には巨大な違いがあります。次の手順を参照してください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char *POINTER;
#define POINTERD char *
int main()
{
POINTER pa,pb;
printf("sizeof(POINTER) = %d\n",sizeof(POINTER));
printf("sizeof(pa) = %d sizeof(pb) = %d\n",
sizeof(pa),sizeof(pb));
POINTERD pc,pd;
printf("sizeof(POINTERD) = %d\n",sizeof(POINTERD));
printf("sizeof(pc) = %d sizeof(pd) = %d\n",
sizeof(pc),sizeof(pd));
return 0;
}
結果は以下のとおりです。
sizeof(POINTER) = 4
sizeof(pa) = 4 sizeof(pb) = 4
sizeof(POINTERD) = 4
sizeof(pc) = 4 sizeof(pd) = 1
結果は、上方から見ることができます。
- typedefが、文章セミコロン文です
- #defineはマクロではなく、完全なステートメントです
- typedefが唯一のエイリアスの既存のタイプではなく、何も新しいタイプを与えることができます
- マクロは、前処理の時点で終了した定義、typedefのがより良いのtypedefと比較して、コンパイル時に行われます
- 一般的に、ダイエットの名前変更の種類を示して区別するために大文字
- 時には我々は、それによってコードの冗長性を削減するいくつかの簡単な構造関数マクロ、コードのネストを、実施しますオーバーヘッドの呼び出しを削減するだけでなく、コンパイルされたファイルが大きすぎる引き起こす可能性があります