Cのtypedef
C 言語には、型に新しい名前を付けるために使用できる typedef キーワードが用意されています。次の例では、シングルバイト数値の用語 BYTE を定義します。
typedef unsigned char BYTE;
この型の定義の後、識別子 BYTE は、型 unsigned char の略語として使用できます。たとえば、次のようになります。
BYTE b1, b2;
慣例により、定義は型名が記号の略語であることをユーザーに思い出させるために大文字ですが、次のように小文字も使用できます:
typedef unsigned char byte;
また、typedefを使用してユーザー定義のデータ型に新しい名前を付けることもできます。たとえば、次のように、構造体で typedef を使用して新しいデータ型を定義し、この新しいデータ型を使用して構造体変数を直接定義できます。
#include <stdio.h>#include <string.h> typedef struct Books{ char title[50]; char author[50]; char subject[100]; int book_id;} Book; int main( ){ Book book; strcpy( book.title, "C Programming"); strcpy( book.author, "Nuha Ali"); strcpy( book.subject, "C Programming Tutorial"); book.book_id = 6495407; printf( "Book title : %s\n", book.title); printf( "Book author : %s\n", book.author); printf( "Book subject : %s\n", book.subject); printf( "Book book_id : %d\n", book.book_id); return 0;}
上記のコードがコンパイルされて実行されると、以下の結果:
Book title : C ProgrammingBook author : Nuha AliBook subject : C Programming TutorialBook book_id : 6495407
typedef vs #define
#defineは、typedefと同様に、さまざまなデータ型のエイリアスを定義するために使用されるCディレクティブですが、次の点で異なります:
typedef型のシンボリック名の定義に限定されますが、#define は型のエイリアスだけでなく、数値のエイリアスも定義できます。たとえば、1 を ONE として定義できます。
typedefはコンパイラによって解釈され、#defineステートメントはプリコンパイラによって処理されます。
#define の最も簡単な使用法を次に示します:
#include <stdio.h> #define TRUE 1#define FALSE 0 int main( ){ printf( "Value of TRUE : %d\n", TRUE); printf( "Value of FALSE : %d\n", FALSE); return 0;}
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
Value of TRUE : 1Value of FALSE : 0