将运算符作为参数传递给C中的函数

时间:2017-01-19 05:02:29

标签: c

我想传递大于(>)和小于(<)运算符作为函数的参数,怎么可能..有没有办法将这些运算符作为参数传递。请任何人都可以帮助我

3 个答案:

答案 0 :(得分:2)

无法传递'原始'运算符,但有一些方法可以实现相同的结果。 最简单的是char

int func(char op, int a, int b)
{
    if (op == '<')
    {
        return a < b;
    }
    else if (op == '>')
    {
        return a > b;
    }
    return -l; /* error */
}

更复杂的解决方案是使用函数指针来执行操作的函数(类似于sort方法使用的比较器)。

答案 1 :(得分:2)

您可以创建枚举并传递它。 或者你可以传递指向比较函数的指针,如下所示:

#include <stdio.h>

int max(int a, int b, int (*comp)(int, int)) {
  if (comp(a, b) < 0) {
     return b;
  } else {
     return a;
  }
}

int mycomp(int a, int b) {
  return a < b ? -1 : 1;
}

int main() {
  printf("%d %d\n", max(1, 2, mycomp), max(2, 1, mycomp));
}

答案 2 :(得分:1)

你可以用宏做一些可怕的事情,但总的来说,不,你不能这样做。您通常接受两个参数函数并调用它,该函数可以根据需要使用><,请参阅the sort docs以获取示例。

也就是说,它不是超级高效的(通过指针调用函数不能内联,对于像><这样的廉价操作,函数调用开销超过了比较工作)。提高效率需要:

  1. 代码的多个副本,每个可能的运算符一个副本(可能通过宏生成)
  2. 转到C ++并使用模板化代码和可以正确内联的functor / lambdas