開発環境
- OS: macOS High Sierra - Apple
- Text Editor: Emacs
- コンパイラー: LLVM/Clang, GCC(gcc)
- プログラミング言語: C
Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の7章(高度な関数 - 関数を最大限に活用する)、自分で考えてみよう(p. 339)を取り組んでみる。
自分で考えてみよう(p. 339)
Makefile
CC = cc all: sample run sample: sample.c $(CC) sample.c -o sample run: sample ./sample
コード
#include <stdio.h>
typedef struct Response Response;
typedef void (*fn_type)(Response);
enum response_type { DUMP, SECOND_CHANCE, MARRIAGE };
void dump(Response r);
void second_chance(Response r);
void marriage(Response r);
fn_type replies[] = {dump, second_chance, marriage};
struct Response {
char *name;
enum response_type type;
};
void dump(Response r) {
printf("%sさんへ、\n"
"残念ながら、前回のデートの結果、\n"
"再度お会いすることはないとの連絡を受けました。\n",
r.name);
}
void second_chance(Response r) {
printf("%sさんへ、\n"
"よいお知らせです。前回のデートの結果、\n"
"もう一度お会いしたいとの連絡を受けました。至急ご連絡ください。\n",
r.name);
}
void marriage(Response r) {
printf("%sさんへ、\n"
"おめでとうございます!前回のデートの結果、\n"
"結婚を申し込みたいとの連絡を受けました。\n",
r.name);
}
int main() {
Response r[] = {{"マイク", DUMP},
{"ルイス", SECOND_CHANCE},
{"マット", SECOND_CHANCE},
{"ウィリアム", MARRIAGE}};
for (int i = 0; i < 4; i++) {
Response res = r[i];
fn_type reply = replies[res.type];
reply(res);
}
}
入出力結果(Terminal)
$ make cc sample.c -o sample ./sample マイクさんへ、 残念ながら、前回のデートの結果、 再度お会いすることはないとの連絡を受けました。 ルイスさんへ、 よいお知らせです。前回のデートの結果、 もう一度お会いしたいとの連絡を受けました。至急ご連絡ください。 マットさんへ、 よいお知らせです。前回のデートの結果、 もう一度お会いしたいとの連絡を受けました。至急ご連絡ください。 ウィリアムさんへ、 おめでとうございます!前回のデートの結果、 結婚を申し込みたいとの連絡を受けました。 $
0 コメント:
コメントを投稿