是否可以参考C中的函数返回值?

时间:2011-02-17 09:19:57

标签: c return-value

是否有可能以某种方式引用我从函数返回的值?一个例子更好地解释了:

CFTypeRef foo()
{
    CFTypeRef valueRef = NULL;
    bar(&valueRef); // fills valueRef with some data
    return valueRef;
}

我认为将其重写为:

会很好
CFTypeRef foo()
{
    bar(&__retvalue);
}

当然__retvalue会是一些神奇的象征。这有意义吗?有可能吗?如果没有,为什么?

4 个答案:

答案 0 :(得分:3)

这是不可能的。在较低级别,返回值通常在处理器寄存器中返回,因此无法作为参考传递。

答案 1 :(得分:2)

a)这是有道理的。 b)没有这样的魔术令牌。 c)“如果没有,为什么”?问题很奇怪......为什么没有这样一个神奇的象征?因为语言设计者从未想过它,或者想到它,并不认为添加到语言是一件好事。 (有人提到返回值通常保存在寄存器中,但这是无关紧要的;编译器可以生成代码以从内存变量加载该寄存器,就像当前foo中所发生的那样)。

答案 2 :(得分:1)

可能不是。

如果你想让代码更清洁,也许你可以定义一个宏?

答案 3 :(得分:0)

你可以让bar()返回它的参数。如果这是重点,你可以保存一行代码。

CFTypeRef foo()
{
    CFTypeRef valueRef = NULL;
    return bar(&valueRef);
}