ページ 1 / 1
Objective-C
Posted: 2011年5月22日(日) 20:08
by cook
voidは戻り値がないというのはそこのメソッドが呼び出され処理されたらその先に続かない。つまりvoidのソースコードが終点ってことですか?また、戻り値がある場合は()にはintとかが入るんですか?その場合はどこに戻るんですか?intだったら処理の内容がint型になって次に利用されるということでしょうか?
Re: Objective-C
Posted: 2011年5月22日(日) 20:29
by box
では、こちらからおたずねします。
下記のコードで、最後に実行するのはどの文でしょうか。
コード:
#include <stdio.h>
void f(void);
void g(void);
void h(void);
int main(void)
{
f();
g();
h();
return 0;
}
void f(void)
{
printf("f\n");
}
void g(void)
{
printf("g\n");
}
void h(void)
{
printf("h\n");
}
Re: Objective-C
Posted: 2011年5月22日(日) 22:02
by cook
void h ですか?
Re: Objective-C
Posted: 2011年5月22日(日) 22:20
by box
cook さんが書きました:
void h ですか?
だとすると、
cook さんが書きました:
voidは戻り値がないというのはそこのメソッドが呼び出され処理されたらその先に続かない。
これと食い違ってきませんか?なぜなら、
main関数で最初に実行する、戻り値がない(void型の)f関数を処理したら
その先に続かないんですよね?
Re: Objective-C
Posted: 2011年5月22日(日) 22:55
by cook
答えになって無いんですが。。。続かない。という断言はこの場合自己解釈による仮定断言です。合点のいく断言ができるなら質問しないと思いませんか?そしてそれを裏付けるようにその後に、つまり…?と疑問文に返してるんですが。。。
戻り値がないというのはどのような動作なのか、その処理はOutletしないという意味で戻らないのかとか。。そして戻り値がある時は()に何が入り、どこに戻るのかを聞いてるだけです。
そして食い違ってませんよ、僕の現状の仮定の解釈でいう処理が続かないというのは。先のコードで言えば、main→f→g→hという流れに基づいて行ってるのではなく。例えば、戻り値が有りとうのは、viewDidLoadでNSDateで取得したインスタンスを別のメソッド(例えばIBActionでNSDateFomatterなどで先の変数を取り込む)へ返す(戻る)、viewDidLoadでNSDateで現在時を取りそれがvoidであったらそこで処理は終わるということなのかなーという事で戻る戻らないを話した次第です。実際違うんでしょうが。
Re: Objective-C
Posted: 2011年5月22日(日) 23:06
by box
戻り値がない関数を実行し終えたら、呼び出し元でその関数呼び出しの次の文を実行する、
というただそれだけです。何もむずかしいことはありません。
あぁ、ちなみに、
>void h ですか?
という答えに対する返事は、
「それは正しくありません。最後に実行する文は、main関数のreturn 0;です」ということを
申し添えます。
ついでに、
>voidは戻り値がないというのはそこのメソッドが呼び出され処理されたらその先に続かない。つまりvoidのソースコードが終点ってことですか?
これはよく読み返してみると意味がよくわからないですね。
「voidのソースコードが終点」って、私が例示したコードではどこに相当すると想定されていますか?
f関数?g関数?h関数?これらすべて?
Re: Objective-C
Posted: 2011年5月22日(日) 23:33
by box
さて、次は、戻り値がない関数が一つもない(voidというキーワードが登場しない)コードの例です。
下記のコードの終点はどこでしょうか?
コード:
#include <stdio.h>
int add(int m, int n);
int sub(int m, int n);
int mul(int m, int n);
int div(int m, int n);
int main(void)
{
int m = 5, n = 2;
printf("%d\n", add(m, n));
printf("%d\n", sub(m, n));
printf("%d\n", mul(m, n));
printf("%d\n", div(m, n));
return 0;
}
int sub(int m, int n)
{
return m - n;
}
int div(int m, int n)
{
return m / n;
}
int mul(int m, int n)
{
return m * n;
}
int add(int m, int n)
{
return m + n;
}
Re: Objective-C
Posted: 2011年5月22日(日) 23:40
by box
さて、しめくくりは、戻り値がある関数とない関数とが混在している場合です。
下記のコードの終点はどこでしょうか?戻り値のないf関数ですか?
コード:
#include <stdio.h>
void f(void);
int add(int m, int n);
int main(void)
{
int m = 5, n = 2;
f();
printf("%d\n", add(m, n));
return 0;
}
void f(void)
{
printf("f\n");
}
int add(int m, int n)
{
return m + n;
}
Re: Objective-C
Posted: 2011年5月22日(日) 23:51
by box
box さんが書きました:
戻り値がない関数を実行し終えたら、呼び出し元でその関数呼び出しの次の文を実行する、
というただそれだけです。何もむずかしいことはありません。
この文の最初を
「戻り値がある関数」と読み替えても、同じことですね。
戻り値がある関数:呼び出し元に実行結果を返す(返された結果をどう料理するかは呼び出し元しだい)
戻り値がない関数:呼び出し元に実行結果を返さない
という違いがあるだけのことです。