単連結リストの整列 #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チェックなどの引数が妥当であることの検査はしない。
正当な引数であることは呼び出す側が保証する。