簡體   English   中英

使用三元運算符選擇C函數

[英]C function call selection using ternary operator

我有兩個帶有相同參數的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語法?

是的,它就像你建議的那樣工作正常。

函數調用operator ()只需要一個評估函數指針的左側,函數的名稱就是這樣。

調用時不需要解析函數指針, ()運算符就是這樣做的。

此示例程序演示:

#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。 當然,或者只是理智。 :)

可以使用這樣的函數指針:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM