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