質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

1046閲覧

return; ってなに?

im_a_student

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/06/13 19:55

編集2021/06/14 15:19

プロトタイプ宣言された関数がreturn;というという分で終わっていたのですが、return;とは一体なんですか?
今までreturn 0;とかreturn 文字(式);しか見たことないです。
検索しても;の部分が認識されなくてうまく検索できません。
その関数の中で引数への値の代入や式の代入が行われていた場合、それは元の値に代入されるのでしょうか。
プロトタイプ宣言された関数の中身は以下です

void func(double t, double *x, double *dx) { dx[0] = x[1]; dx[1] = -(g/l)*sin(x[0]); return; }

この例の場合、3つ目の引数に値が代入されていますがこの関数が終わったときには元の3つ目の引数にはきちんと値が代入されて返っているのでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/13 20:01 編集

Cですか?C#ですか? あとコードは全部でこれだけですか? コードの出典はどこですか?
im_a_student

2021/06/13 20:11

C言語です。 このコードは市販の教科書などではないです。 ある人のオリジナルです。
m.ts10806

2021/06/13 20:14

では、その人に聞いては。 1メソッドだけ見ても用途までは分かりませんし、 やはり書いた人にしか本当の意図は分かりません。
ppaul

2021/06/13 23:59

SaitoAtsushiさんとotnさんがか書かれているように、このソースコードを書いた人はC言語には詳しくなさそうです。書いた人に聞くのはやめておいた方が良いでしょう。
fana

2021/06/14 01:53

(ここに示されたコードは原文通りなのかなぁ? 質問の過程でvoidが抜け落ちたとかの可能性が高そうにも思える)
m.ts10806

2021/06/14 02:37

コードやエラーはコピペしてください。 見ている人には質問内容が全てです。
fana

2021/06/14 02:51

voidの件はどうやら元々コードを書いた人の罪(?)ではなかったようですね. 書いた人に訊けるならば訊いた方が早いかも.
WoodenHamlet

2021/06/14 09:41

プロトタイプ宣言が無くて混乱しているのですが、もう解決したということなのかな?
im_a_student

2021/06/14 18:33

コードは印刷されていてコピペできません。すみません。 コードを書いた人には、聞くことができないのでこちらで質問させていただきました。 訂正など教えていただきありがとうございます!
guest

回答5

0

ベストアンサー

関数からの返り値がなくても、例えばファイルの書き込みなどを行い、終了していることを明示するときに書いたりします

投稿2021/06/14 04:21

goto_yuta_

総合スコア211

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

im_a_student

2021/06/14 18:46

やっとわかりました!ありがとうございます。
guest

0

文字通り、「戻る」で、関数の実行を終了して、呼び出し元に戻ることです。

return 式;は、戻ると共に値を返す関数の返り値を式の値にするという動作をしますが、return;は単に戻るだけです。返り値の指定をしていませんので、返り値の無い関数(返り値の型がvoidの関数)で使います。

普通は、

C

1void foo(int x){ 2 if(x==1){ 3 return; 4 } 5 ~~~~ 6}

のように途中で終了するために使います。質問文の例のように、関数の最後に書くことは無意味なのであまりないと思いますが、書いても間違いでは無いです。

また、質問文の例だと、関数の返値の型がintなのでreturn;を書くと、コンパイラの警告オプションの指定によっては、

warning: 'return' with no value, in function returning non-void

のような警告が出るかと思います。値を返さず終了するならvoid型にしろと言うことですね。

アドバイスとしては、Cのプログラムを読むなら、効率的な学習方法としては、まずは入門書で文法を一通り理解した方が良いです。関数は全部覚える必要は無く都度調べれば良いのですが、基本構文や演算子は覚えることが必要です。

投稿2021/06/13 23:45

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/06/14 01:26

補足: > 質問文の例のように、関数の最後に書くことは無意味なのであまりないと思いますが、書いても間違いでは無いです。 少なくとも warning は出るはず。その意味ではマチガイと言える。
otn

2021/06/14 09:28

「関数の最後に書く事」自体では警告は出ませんよ。 関数の返値との関係で警告が出ることとの勘違いでは?返り値の型とreturn文が対応していないといけないのは最後とか途中とかには関係ないまた別の話です。
episteme

2021/06/14 11:21

あ、あ、void ならケツの } で勝手に return のことか。失礼しましたその通り。
im_a_student

2021/06/14 18:47

voidは入れ忘れていましたすみません! とても分かりやすく回答してくださりありがとうございます。理解できました
guest

0

return;とは一体なんですか?

関数を終了させる、という命令です

投稿2021/06/13 21:31

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/06/14 09:15

質問者の意図は 「returnのうしろに"何も書かない" のはいかなる意味か?」ではなかろうか。
y_waiwai

2021/06/14 09:27

そもそもreturnがナニモノかわかっていないってことだと
episteme

2021/06/14 09:54

んー...そぉなのかな。 return なんとか; が "何とかを返す"だとは理解してるように思えるんだが...
y_waiwai

2021/06/14 10:01

終了させるってところが理解できてませんわな なので、それをおしえなくちゃ
im_a_student

2021/06/14 18:48

理解できました!ありがとうございます。
guest

0

この例の場合、3つ目の引数に値が代入されていますが

3つ目の引数 dx に値を代入しているところはありません。
dx = ...; という文はないでしょう。

関数 func が呼び出されたとき、すべての引数 t、x、dx には値が入っています。
x も dx もポインタで、呼び出し元の配列の先頭要素を指しています。
x や dx には呼び出し元の配列のアドレスが入っているということです。

dx[0] = ...; で呼び出し元の配列の先頭要素に値が入ります。
dx[1] = ...; で呼び出し元の配列の2番目の要素に値が入ります。

投稿2021/06/14 15:41

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

im_a_student

2021/06/14 18:46

配列のアドレスの型になっていることを忘れてました! ありがとうございます!
guest

0

返却値が無い場合、すなわち型で言えば返却値が void であるときには関数内の return; はその場で関数を抜けることを意味します。

ただし、質問の例のように関数の返却値の型が書かれていないときは C89 では暗黙に int が補われるルールです。 なおかつ return; で関数を抜けた場合 (つまり返却値がない場合) にその返却値を利用しようとするのは未定義です。 (かなり悪い作法なのでやるべきではないです。)

C99 (C の仕様の 1999 年の改定) では返却値を省略した場合の挙動が廃止されたので、互換性に配慮して過去の仕様を残している処理系もありますが (逆にエラーにする処理系もあるということです) 、原則としてはやめておいたほうがよい書き方です。

投稿2021/06/13 20:44

SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

im_a_student

2021/06/14 18:49

voidは書き忘れていました。すみません! 時代背景まで教えてくださりありがとうございます。理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問