Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のtypedefキーワードで構造体を定義する方法をわかりやすく解説

C言語では、typedefキーワードを使うことで、既存のデータ型に新しい名前(別名)を定義できます。ここでは、typedefの基本から、構造体への適用方法まで、具体例を交えて解説します。

typedefとは

C言語では、typedefキーワードを使用して新しいデータ型名を定義することができます。ただし、typedefでまったく新しいデータ型を作成できるわけではなく、すでに存在する型に対して新しい名前を付けるための機能です。

構文

typedef データ型 新しい名前;

基本的な使用例

typedef int bhanu;
int a;
bhanu a;

この宣言のポイントは以下の通りです。

  • typedef int bhanu; という文は、コンパイラに対して「bhanu」を「int」の別名として認識させる指示です。
  • bhanu」を使って、新しい変数「a」を宣言できます。
  • bhanu a;」は、変数「a」をint型として宣言することと同じ意味になります。

サンプルプログラム

次のプログラムでは、int型に「hours(時間)」という別名を付けて利用しています。

#include <stdio.h>

int main(void) {
    typedef int hours;
    hours h; /* int h; と同じ意味 */

    printf("Enter hours: ");
    scanf("%d", &h);

    printf("Minutes = %d\n", h * 60);
    printf("Seconds = %d\n", h * 60 * 60);

    return 0;
}

実行結果

Enter hours: 1
Minutes = 60
Seconds = 3600

このように、hoursint型とまったく同じように動作しますが、プログラムの意図がより明確になり、可読性が向上します。

構造体をtypedefで定義する例

typedefは構造体と組み合わせると特に便利です。構造体タグ名を毎回書く手間が省け、宣言がシンプルになります。

#include <stdio.h>

typedef struct employee {
    int eno;
    char ename[30];
    float sal;
} emp;

int main(void) {
    emp e = {10, "ramu", 5000};

    printf("number = %d\n", e.eno);
    printf("name = %s\n", e.ename);
    printf("salary = %.0f\n", e.sal);

    return 0;
}

実行結果

number = 10
name = ramu
salary = 5000

解説

  • typedef struct employee {...} emp; により、struct employeeという構造体型に「emp」という別名が付きます。
  • 以降は struct employee e; と書く代わりに、emp e; だけで構造体変数を宣言できます。
  • 初期化では、メンバenoに10、enameに"ramu"、salに5000を設定しています。
  • 文字列メンバの表示には%s、float型には%fを使用する点に注意しましょう。

まとめ

typedefを使うと、既存の型や構造体にわかりやすい別名を付けられるため、コードの可読性と保守性が向上します。特に構造体を頻繁に扱うプログラムでは、宣言が簡潔になるメリットが大きいため、積極的に活用するとよいでしょう。

  1. C言語のelse ifラダー(階段状分岐)ステートメント徹底解説

    else ifラダーは、複数の条件から1つを選ぶ「多方向分岐」を記述する際に最も一般的に使われる構文です。上から順に条件を評価し、最初に真となったブロックだけを実行し、残りはすべてスキップします。基本構文else ifラダーの基本的な書き方は以下のとおりです。if (condition1) stmt1; else if (condition2) stmt2; - - - - - - - - - - else if (condition n) stmtn; else stmt x;条件1が偽であれば次の条件2へ、それも偽であればさらに次の条件へと、いずれかの条件が真になるまで順番に評価が進みます

  2. 構造体の概念で理解するC言語のビットフィールド|定義方法と範囲の計算を徹底解説

    ビットフィールドとはビットフィールドとは、変数が占めるメモリのサイズをビット単位で指定できるC言語の機能です。通常は構造体(struct)の中で定義されます。ビットフィールドの基本:1バイト=8ビット記述例struct info { int x : 2; };この例では、メンバxは2ビットを占有します。ビットフィールド使用時の注意点ビットフィールドの範囲外の値を代入することはできません(その場合の動作は保証されません)。sizeof演算子やアドレス演算子(&)をビットフィールドに適用できないため、scanf関数で値を入力することもできません。ビットフィールドに指定できるデータ型