第24問

以下は、名前を指定しながら種類の異なるあいさつを表示するプログラムです。ただし、コメントの部分に入れるべきコードが隠れています。

どんなコードが入るか分かりますか?
main.c
#include <stdio.h>
#include <stdlib.h>

void GreetTo(const char *pName, /* ここに入るコードは? */) {
  pGreeter(pName);
}

void MorningGreeter(const char *pName) {
  printf("Good morning, %s!\n", pName);
}

void EveningGreeter(const char *pName) {
  printf("Good evening, %s!\n", pName);
}

int main(void) {
  GreetTo("Leo", MorningGreeter);
  GreetTo("Yuki", EveningGreeter);

  return EXIT_SUCCESS;
}
実行結果
Good morning, Leo!
Good evening, Yuki!
もう1問、穴埋め問題をどうぞ。
はい。第23問と似てますね。
そうね。でも、もっと柔軟なあいさつを表示できるプログラムになってるのよ。
えっと、あいさつを表示する関数はこれか……
void GreetTo(const char *pName, /* ここに入るコードは? */) {
  pGreeter(pName);
}
この関数の第2引数をどう書くか、っていう問題ですね。
そうそう。
あいさつする関数を呼び出している箇所は……
  GreetTo("Leo", MorningGreeter);
  GreetTo("Yuki", EveningGreeter);
このMorningGreeterとかEveningGreeterって、少し上のほうで定義されてる関数と同じ名前になってますね。
同じというか、それは関数名よ。
なんと!
関数の引数に関数を渡すには?