単連結リストの整列 #109 識別子だってシンプルに

school_recordを分割した残りの方だが名前を短くしよう。
たくさんキーを打つのが面倒なのは予約語に限ったわけではない。
識別できるのなら識別子は短い方が打つのが楽だ。

record.h
#ifndef RECORD_H_INCLUDED
#define RECORD_H_INCLUDED

#include "grade.h"

typedef struct tag_record record_t;

record_t *record_new(const char *name, grade_t maths, grade_t physics);
void record_dispose(record_t *rec);
const char *record_get_name(const record_t *rec);
grade_t record_get_maths(const record_t *rec);
grade_t record_get_physics(const record_t *rec);

#endif /* RECORD_H_INCLUDED */
record.c
#include <stdlib.h>
#include <string.h>
#include "record.h"

struct tag_record {
    char *name;
    grade_t maths;
    grade_t physics;
};

record_t *record_new(const char *name, grade_t maths, grade_t physics)
{
    record_t *p;
    if ((p = malloc(sizeof(record_t))) == NULL || (p->name = malloc(strlen(name) + 1)) == NULL) {
        free(p);
        return NULL;
    }
    strcpy(p->name, name);
    p->maths = maths;
    p->physics = physics;
    return p;
}

void record_dispose(record_t *rec)
{
    free(rec->name);
    free(rec);
}

const char *record_get_name(const record_t *rec)
{
    return rec->name;
}

grade_t record_get_maths(const record_t *rec)
{
    return rec->maths;
}

grade_t record_get_physics(const record_t *rec)
{
    return rec->physics;
}

NULLチェックなどの引数が妥当であることの検査はしない。
正当な引数であることは呼び出す側が保証する。