Objective-C

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
cook

Objective-C

#1

投稿記事 by cook » 14年前

voidは戻り値がないというのはそこのメソッドが呼び出され処理されたらその先に続かない。つまりvoidのソースコードが終点ってことですか?また、戻り値がある場合は()にはintとかが入るんですか?その場合はどこに戻るんですか?intだったら処理の内容がint型になって次に利用されるということでしょうか?

box
記事: 2002
登録日時: 14年前

Re: Objective-C

#2

投稿記事 by box » 14年前

では、こちらからおたずねします。
下記のコードで、最後に実行するのはどの文でしょうか。

コード:

#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");
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

cook

Re: Objective-C

#3

投稿記事 by cook » 14年前

void h ですか?

box
記事: 2002
登録日時: 14年前

Re: Objective-C

#4

投稿記事 by box » 14年前

cook さんが書きました: void h ですか?
だとすると、
cook さんが書きました: voidは戻り値がないというのはそこのメソッドが呼び出され処理されたらその先に続かない。
これと食い違ってきませんか?なぜなら、
main関数で最初に実行する、戻り値がない(void型の)f関数を処理したら
その先に続かないんですよね?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

cook

Re: Objective-C

#5

投稿記事 by cook » 14年前

答えになって無いんですが。。。続かない。という断言はこの場合自己解釈による仮定断言です。合点のいく断言ができるなら質問しないと思いませんか?そしてそれを裏付けるようにその後に、つまり…?と疑問文に返してるんですが。。。
戻り値がないというのはどのような動作なのか、その処理はOutletしないという意味で戻らないのかとか。。そして戻り値がある時は()に何が入り、どこに戻るのかを聞いてるだけです。

そして食い違ってませんよ、僕の現状の仮定の解釈でいう処理が続かないというのは。先のコードで言えば、main→f→g→hという流れに基づいて行ってるのではなく。例えば、戻り値が有りとうのは、viewDidLoadでNSDateで取得したインスタンスを別のメソッド(例えばIBActionでNSDateFomatterなどで先の変数を取り込む)へ返す(戻る)、viewDidLoadでNSDateで現在時を取りそれがvoidであったらそこで処理は終わるということなのかなーという事で戻る戻らないを話した次第です。実際違うんでしょうが。

box
記事: 2002
登録日時: 14年前

Re: Objective-C

#6

投稿記事 by box » 14年前

戻り値がない関数を実行し終えたら、呼び出し元でその関数呼び出しの次の文を実行する、
というただそれだけです。何もむずかしいことはありません。

あぁ、ちなみに、
>void h ですか?
という答えに対する返事は、
「それは正しくありません。最後に実行する文は、main関数のreturn 0;です」ということを
申し添えます。

ついでに、
>voidは戻り値がないというのはそこのメソッドが呼び出され処理されたらその先に続かない。つまりvoidのソースコードが終点ってことですか?

これはよく読み返してみると意味がよくわからないですね。
「voidのソースコードが終点」って、私が例示したコードではどこに相当すると想定されていますか?
f関数?g関数?h関数?これらすべて?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 14年前

Re: Objective-C

#7

投稿記事 by box » 14年前

さて、次は、戻り値がない関数が一つもない(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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 14年前

Re: Objective-C

#8

投稿記事 by box » 14年前

さて、しめくくりは、戻り値がある関数とない関数とが混在している場合です。
下記のコードの終点はどこでしょうか?戻り値のない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;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

box
記事: 2002
登録日時: 14年前

Re: Objective-C

#9

投稿記事 by box » 14年前

box さんが書きました: 戻り値がない関数を実行し終えたら、呼び出し元でその関数呼び出しの次の文を実行する、
というただそれだけです。何もむずかしいことはありません。
この文の最初を
「戻り値がある関数」と読み替えても、同じことですね。

戻り値がある関数:呼び出し元に実行結果を返す(返された結果をどう料理するかは呼び出し元しだい)
戻り値がない関数:呼び出し元に実行結果を返さない
という違いがあるだけのことです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る