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

标签 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 语法来要求一次写入参数?

最佳答案

是的,正如您建议的那样,它工作正常。

函数调用运算符 () 只需要一个计算结果为函数指针的左侧,函数名称就是这样做的。

调用时不需要取消引用函数指针,() 运算符会这样做。

这个示例程序演示了:

#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 风格的。当然,或者只是单纯的理智。 :)

关于使用三元运算符的 C 函数调用选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031818/

相关文章:

javascript - 有没有建立方便的javascript回调写法?

python - 我的代码显示了不正确的mysql语法,尽管它是正确的

c - Firesheep - 安全公共(public)网络

C Socket Server,内存随文件写入而增加

function - 这是否可以在 Racket 中定义一个没有参数的函数?

c++ - 我可以获得多个链式函数调用的返回类型吗?

c - 缓冲区溢出: execute char array loaded into memory

c - ZMQ 多线程 C 客户端

javascript - JavaScript中的动态函数名称

C++循环直到输入特定字符