2016-11-14 56 views
1

我试图使用结构来使用以下代码返回多个变量。使用c函数返回多个变量

有没有更好的方法来做到这一点?

和这种技术,它是有效的? PS:我是新来的嵌入式系统,所以试图发现内存,性能和这些限制的最佳技术。

#include <stdio.h> 
struct two func(int , int); 

struct two { 
    int x; 
    int y; 

}; 

int main() { 
    printf("values is\n %i\n %i\n ",func(33,44).x,func(33,44).y); 
    return 0; 
} 


struct two func(int x, int y) { 

    struct two ex; 
    ex.x=x; 
    ex.y=y; 

    return ex; 
}; 
+3

高效?比较什么? –

+0

从可读性的角度来说,我会说,使用单独的函数作为getter/setter。 –

+1

缩进你的代码。 –

回答

2

这是一种很好的技术,而且效率不高。 (但也有其他选择;在Sean K的答案中提到了一个,另请参阅http://c-faq.com/misc/multretval.html。)

什么是低效率 - 如果函数有副作用,可能是错误的 - 要调用它两次以获得它两个值。我会使用

struct two r = func(33, 44); 
printf("values are %i %i\n", r.x, r.y); 
2

使用指针

空隙Func键(INT * RETURN1,INT * RETURN2)

调用时: INT的x,y; Func(& x,& y);

它也是一个通用的标准,只使用函数返回值的错误代码,并且只通过指针返回值。

1

函数是一组输入和与每个输入涉及恰好一个输出的属性的一组可允许的输出之间的关系。

- Wikipedia

所以对于一个函数的定义,有没有可能从函数返回多个值。

您可以通过返回包含两个值或数组的结构来克服它,但不能返回多个值。

+0

这是*数学*定义。但大量的编程语言显式支持返回多个值。 (我想如果你想迂腐,你可以说他们返回一个值,这是一个有多个值的元组,但在我看来,这似乎是无益的分裂。) –

+0

@SteveSummit它肯定会返回一个元组。也许提供了一些自动装箱,但它仍然是一个单一的返回值或不是一个函数。函数返回一个值。 – xenteros

+0

@SteveSummit在编程方面我们基于数学而不是哲学。如果你对设计模式迂腐,为什么不在这样的基础上?我还解释了在C中返回多个值的机制,所以我仍然不理解你的downvote。你可能不会很迂腐,但是某个人的事实并不符合他的要求。 – xenteros