Cコンポーネントの選択において、構造を返す関数の利点は何ですか?例えば:
struct S {
int a, b;
} x;
上記の構造体を以下のような関数として割り当てることができるのはなぜですか?これを行うことの利点はありますか?
extern struct S f(); /* Why is this neccesary? */
x = f(); /* Is this accurate */
この人たちに目を開けてください。
Cコンポーネントの選択において、構造を返す関数の利点は何ですか?例えば:
struct S {
int a, b;
} x;
上記の構造体を以下のような関数として割り当てることができるのはなぜですか?これを行うことの利点はありますか?
extern struct S f(); /* Why is this neccesary? */
x = f(); /* Is this accurate */
この人たちに目を開けてください。
たまたまを返す関数ですstruct
。それ以上のものはありません。関数int
が構造体を返すのを見て驚かないのはなぜですか?
余談ですが、これextern
は関数のデフォルトのストレージクラスであるため、ここでは不要です。
関数から複数の値を返すことができるので便利です。
たとえば、このように使用できます
struct Point {
int x;
int y;
};
struct Point getMousePos()
{
struct Point pos;
pos.x = 567;
pos.y = 343;
return pos;
}
int main()
{
struct Point mouse_pos = getMousePos();
printf("Mousepos %d,%d\n", mouse_pos.x, mouse_pos.y");
}
関数はで前方宣言することができextern
(これは通常ヘッダーファイルで行われます)、関数自体が別のファイルで定義されている場合でも、他の関数はそのプロトタイプ、つまりパラメーターと戻り値を認識します。
構造体へのポインタの代わりに構造体のコピーを取得した場合、それを心配する必要がないfree()
こと、またはあるスレッドが構造体に書き込んでいる間に別のスレッドが構造体から読み取るデータ競合があるかどうか、または関数によって返されるポインターは、制御できない可能性のあるアクションによって無効になります。