C语言中的干缓存

C语言中的干缓存,c,dry,memoization,C,Dry,Memoization,我希望将以下C代码晾干: if (i < SIZE_OF_V) { if (V[i]) K = V[d]; else K = V[d] = (expensive complicated call); } else { K = (expensive complicated call); } if(i

我希望将以下C代码晾干:

if (i < SIZE_OF_V) {
    if (V[i])
        K = V[d];
    else
        K = V[d] = (expensive complicated call);
} else {
    K = (expensive complicated call);
}
if(i
有什么建议吗?本地宏可以工作,但我更喜欢更现代的替代方案。

您只需简单地执行即可

if (i < SIZE_OF_V && V[i]) {
    K = V[d];
} else {
    K = (expensive complicated call);

    if (i < SIZE_OF_V)
        V[d] = K;
}

我没听清单词
DRY
你能不能?@Omkant DRY:“不要重复你自己”啊哈哈。。。这样的缩写。。谢谢@ascii-lime@Charles保持原样我发现你的代码比下面的alestanis的代码更容易理解。@Charles,你为什么不把它放在一个函数中呢?仍然有
I
的微小重复,但是你也可以通过将比较结果存储在第一个
if()之前的一个变量中来删除它
@caf这真的比只计算一次整数比较好吗?;)几乎可以肯定的是,经过编译后,这一点是相同的,这取决于OP的原教旨主义程度;)
int myExpensiveAndComplicatedCall() {
    // Do things
}

if (i < SIZE_OF_V) {
    if (V[i])
        K = V[d];
    else
        K = V[d] = myExpensiveAndComplicatedCall();
} else {
    K = myExpensiveAndComplicatedCall();
}