首页 > 解决方案 > 如何将布尔条件的非评估表达式传递给函数?

问题描述

我在下面编写的代码重复了 3 次:

int foo = 3;
while (foo < 10) {
    printf("Hi!");
    foo++;
}
foo = 12;
while (foo % 8 != 0) {
    printf("Hi!");
    foo++;
}
foo = 25
while (foo <= 38) {
    printf("Hi!");
    foo++;
}

这可以简化为函数 bar (foo, condition ); 该函数如下所示:

while (foo <= 38) {
    printf("Hi!");
    foo++;
}

我会这样称呼它:

print_hi(3, foo < 10);
print_hi(12, foo % 8 != 0);
print_hi(25, foo <= 38);

标签: cfunctionargumentsparameter-passingdry

解决方案


如何将布尔条件传递给函数?

作为一种接近的替代方案,代码可以使用函数指针。将该条件形成为函数。

bool f_lt(int a, int b) {
  return (a < b);
}

bool f_rem(int a, int b); // definition left for OP
bool f_le(int a, int b); // definition left for OP

void print_hi(int foo, int bar, bool (*condition)(int, int));
  while(condition(foo, bar)){
    printf("Hi!");
    foo++;
  }
}

称它们为:

print_hi(3, 10, f1_lt);
print_hi(12, 8, f1_rem);
print_hi(25, 38, f1_le);

推荐阅读