使用三元运算符选择C函数

时间:2016-05-04 15:15:59

标签: c function syntax call function-call

我有两个带有相同参数的C函数f1f2。根据条件,我需要使用相同的参数调用一个或另一个:

if (condition) {
    result = f1(a, b, c);
} else {
    result = f2(a, b, c);
}

我知道可以使用语法:

result = condition ? f1(a, b, c) : f2(a, b, c)

是否有可能需要一次写入参数的 DRY 语法?

2 个答案:

答案 0 :(得分:6)

是的,它就像你建议的那样正常。

函数调用操作符()只需要一个左侧,它可以求值为函数指针,函数名称可以这样做。

调用时无需拒绝函数指针,()运算符会这样做。

此示例程序演示:

#include <stdio.h>

static int foo(int x) {
    return x + 1;
}

static int bar(int x) {
    return x - 1;
}

int main(void) {
    for (int i = 0; i < 10; ++i)
        printf("%d -> %d\n", i, (i & 1 ? foo : bar)(i));
    return 0;
}

打印:

0 -> -1
1 -> 2
2 -> 1
3 -> 4
4 -> 3
5 -> 6
6 -> 5
7 -> 8
8 -> 7
9 -> 10

这里没什么奇怪的。

由于C在Python之前有点过时,也许它的Python语义在这里是C-ish。当然,或者只是理智。 :)

答案 1 :(得分:1)

可以使用这样的函数指针:

int (*f)(int, int, int, ...);
f = condition ? f1 : f2;
result = (*f)(a, b, c, ...);