c - 如何将布尔条件的非评估表达式传递给函数?
问题描述
我在下面编写的代码重复了 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);
解决方案
如何将布尔条件传递给函数?
作为一种接近的替代方案,代码可以使用函数指针。将该条件形成为函数。
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);
推荐阅读
- vba - MS Access VBA 正确的年份之间的周数
- numeric-limits - 节中的数字限制
- python - 准确度通过 Epochs 提高,但恢复到评估的初始准确度
- power-automate - 如何在 DocuSign 中执行邮件合并并通过 MS Power Automate Flow 自动发送 PDF
- sass - 覆盖 Bootstrap 5 的变量时的导入顺序
- android-studio - 无法访问 tensorflow.lite.support.tensorbuffer
- scala - 如何监督具有调度程序的类型化演员并使用接待员注册自己?
- angular - 为什么我在创建 web-worker 时总是收到 Invalid project name?
- pine-script - 如何在不移动分量的情况下计算平均值和标准差
- spring - Spring Initializr 无法在 Google Chrome 中加载,但在 Microsoft Edge 中打开