2016-11-14 12 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

これは素晴らしい技術であり、非効率的ではありません。 (しかし、代替案もありますが、その1つはSean Kの答えに書かれています)

この機能に副作用がある場合は、効率が悪く、おそらくバグがあります。 2つの値。私は、関数は、入力のセットと、各入力は正確に一つの出力に関連する特性を有する許容出力のセットとの間の関係である

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

、関数から複数の値を返す可能性はありません。

2つの値または配列を含む構造体を返すことでそれを克服できますが、複数の値を返すことはできません。

+0

これは*数学的な定義です。しかし、プログラミング言語の多くは明示的に複数の値を返すことをサポートしています。 (あなたがペタンティックであることを望むのであれば、いくつかの値のタプルである1つの値を返すと言うことができますが、それは役に立たないようなヘアスプリットのようです) –

+0

@SteveSummit確かにタプルを返しています。たぶん、いくつかのオートボクシングが提供されるかもしれませんが、それはまだ単一の戻り値か関数ではありません。関数は単一の値を返します。 – xenteros

+0

@SteveSummitプログラミングでは、私たちは哲学ではなく数学に基づいています。あなたがデザインパターンを踏襲しているのであれば、なぜそのような基本はありませんか?私はCで複数の値*を返す仕組みについても説明しています。だから私はあなたのdownvoteをまだ理解していません。あなたはペタンティックではないかもしれませんが、誰かがそうであるという事実は、彼にダウンボートの資格を与えません。 – xenteros

関連する問題