typedef宣言

 定義したperson型の構造体を使いますよと宣言するときは、

// 戦士「ああああ」
struct person aaaa;

 このように書きます。サブルーチンの引数にperson型の構造体を渡したいときも、

void showStatus(struct person chara) {
    printf("名前:%s\n", chara.name);
    printf("職業:%s\n", chara.job);
    printf("レベル:%d\n", chara.lv);
    printf("HP:%d\n", chara.hp);
    printf("MP:%d\n", chara.mp);
}

 このように書きます。構造体の指定の際は必ず「struct person aaaa;」のように「struct (構造体の型名) (変数名)」、つまり、3つの単語を記述しなければなりません。プログラムが長くなると少々面倒になります。「int a;」のように型名と変数名だけで定義できたら楽になります。それを実現してくれるのがtypedef宣言です。typedef宣言は、構造体の定義のすぐ下に、

typedef struct person character;

 このように書くことで、それ以降は「struct person」と2つの単語を書かなくても「character」の単語1語で済みます。「struct person」=「character」という意味が定義されます。以下のサンプルプログラムを確認してみて下さい。

#include <stdio.h>
#include <string.h>

struct person {
    char name[40];      // 名前
    char job[40];       // 職業
    int lv;             // レベル
    int hp;             // HP
    int mp;             // MP
};
typedef struct person character;

void showStatus(character chara) {
    printf("名前:%s\n", chara.name);
    printf("職業:%s\n", chara.job);
    printf("レベル:%d\n", chara.lv);
    printf("HP:%d\n", chara.hp);
    printf("MP:%d\n", chara.mp);
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // 戦士「ああああ」
    character aaaa;
    strcpy(aaaa.name, "ああああ");
    strcpy(aaaa.job, "戦士");
    aaaa.lv = 40;
    aaaa.hp = 360;
    aaaa.mp = 0;
    
    showStatus(aaaa);
    
    // 魔法使い「いいいい」
    character iiii;
    strcpy(iiii.name, "いいいい");
    strcpy(iiii.job, "魔法使い");
    iiii.lv = 38;
    iiii.hp = 250;
    iiii.mp = 230;
    
    showStatus(iiii);
    
    return 0;
}

 前回までのプログラムと同じ結果になることを確認して下さい。

■スポンサーリンク

このページの先頭へ