把函数名告诉find()

假设你从原来的代码中提取出了搜索条件,并把它改写成函数:

  1. int sports_no_bieber(char *s)
  2. {
  3. return strstr(s, "sports") && !strstr(s, "bieber");
  4. }

把函数名告诉find() - 图1

现在,只要有办法把函数名作为参数传给find(),就能在find()中注入测试了。

把函数名告诉find() - 图2

只要能找到一种把函数名传给find()的方法,以后就可以做任何类型的测试了。只要能写一个接收字符串并返回真或假的函数,就可以复用同一个find()函数。

  1. find(sports_no_bieber);
  2. find(sports_or_workout);
  3. find(ns_theater);
  4. find(arts_theater_or_dining);

如何在形参中保存函数名?如果你有函数名,又如何用它来调用函数呢?