2016-10-17 1 views
-3

例えば、struct s1というように、構造体を変換するCの中で関数fを作成したいとします。Cの構造体を変更するための慣用的なベストプラクティスはありますか?

はそれを受け取るためにfあなたの関数のために優れているかどうかを超える近代的なCであり、ベストプラクティス/イディオムです/構造体にコピー構造体の対ポインタを返しますか?

例えば、ここにfためのいくつかの可能なタイプの署名がある(と私は私が欠けているということではありませ確信している):一般的に

struct s1 f(struct s1) 
struct* s1 f(struct* s1) 
void f(struct *s1) 

、人々が離れてこれらの一部から操縦してみます型署名とその他の型?

+0

は、構造体のサイズに依存し、その意図は、コピーを作成、または単に構造内のいくつかの値を変更するかどうか。 – user3386109

答えて

1

最後は慣用的であるへのポインタをretuirnsことを考えれば明らかでない、クローニングまたはない可能性があります。それは通常、彼らはより高いレベルの言語ではなくCを使用している理由だ、とポインタを渡すと、スタック上の全体構造をプッシュよりも高速であるため、

Cの人々は、効率性に高い価値を置きます。インプレースの構造を変更することは、コピーを取ってヒープメモリを割り当てて戻すことよりもずっと高速です。また、Cは浅いコピーと深く区別する良い方法を持っていないので、コピーメソッドはポインタメンバーに何が起こるかという問題につながります。あなたが本当のCコード内の3つの方法すべてを見ることができますしかし

1

私はコピーで作業についての質問は完全に意図に依存だと思う - クローンのクローンを作成し、変更すると、元の変更は非常に異なっていることを考えます。だから、私たちは、元を変更している場合、私は最後の署名を選ぶだろう#1

を除外する。これは、元に取り組んでいることを明らかにその、もう一つはそのそれはいくつかの構造体

関連する問題