Arduinoを授業で学んでいるものです。

Arduinoを授業で学んでいるものです。 「戻り値」とはなんですか? まったく意味がわかりません。この値に戻ってくるということですか?できれば例も含めてわかりやすく説明お願いしますorz

C言語関連435閲覧

ベストアンサー

このベストアンサーは投票で選ばれました

0

ArduinoのプログラムはスケッチといわれるものですがC言語というプログラミング言語によく似ています。 C言語では機能を分けてプログラムします。機能を実現した命令の塊を関数と呼びます。 なのでArduinoでも関数というのは同じです。 Arduinoでアナログ値を取り込む機能を実現したanalogRead(pin) という関数があります。この関数を 命令X; analogRead(pin) ; 命令Y; というふうにコーディングしたとするとコンパイラーはanalogRead(pin) の位置にanalogRead(pin) の塊の命令を展開するのではなくanalogRead(pin) へジャンプするような命令に変換します。 実際マイコンが動作するとき、analogRead(pin) の先頭にジャンプし、そこの一群の命令を実行後、命令Yへ戻るのです。ここで「戻る」という言葉が出てきました。これが「戻り値」の元です。 上の例では「戻り値」を使わないで無視してますがね。 戻り値そのものの説明は他の回答者さんの回答を参照してください。

その他の回答(4件)

0

関数によっては結果が不要なもの (関数内部でprintfしてくれるとか) 以外は普通、結果が必要です。 たとえば、 ファイルを読み込む関数 (自作関数)があったとします。 そのまま読み込んでくれればいいですが、 ■ ファイルが存在しない 場合があります。 無いものを読もうとしても無理ですよね。 その場合、その処理をスキップしなければなりません。 (エラーになる可能性がありますから。) なので、 ファイルが開けない -> 「失敗」をあらわすものを返す 開けて読めた -> 「成功」をあらわす〃 という結果がほしいですね。 失敗なのか成功なのか。 そういうときに使います。 もちろん、普通の計算で その計算結果でもいいです。 そういう「結果」が戻り値です。 私はC/C++ でソフトなので、詳しいことわかりませんので、 調べてみたところ、Arduinoでも return ... っていうやつを使いますね。 これの直後に来るデータです。 return 0; とすると、 0が戻り値。 関数に処理させて、その結果です。 この戻り値を渡すことを「返す」といいます。 呼び出し側 ( main関数とか。 ) が関数を呼び出して処理させる -> 関数が戻り値を返す -> 呼び出し側 がデータを受け取る -> それをもとに 別の処理... みたいな。

0

簡単に言えば「関数から出力された値」のことです。 コンピューターのプログラムはすべて、プロシージャーという小規模プログラムの集まりでできています。 C言語ではこれを関数(function)BASICではサブルーチンと呼んでいます。 クラスとか、オブジェクトも、その一種です。 これらのプロシージャーどうしは入力を受けて、それを何らかの形に変えて、出力をするというプロセスでプログラムは完結します。 この出力先に対して、Aというプロシージャーが別のプロシージャーBに向けて出力した値は引数によってその値が引き渡され、プロシージャーBが処理を終えてから、プロシージャーAに直接数値を”戻す時”、その出力データを「戻り値」と呼びます。 図にするとこんなイメージです 【プロシージャーA】→引数→【プロシージャーB】→<戻り値>→【プロシージャーA】 戻り値についてはあらかじめプロシージャーBの側でどんな形式で戻るのかを明示して、プロシージャーAはその形式で戻ってくることを期待して戻り値の受け方を設計をします。 その相互の取り決めをプロシージャーAが認識する場所がソースの頭の部分で宣言されている関数プロトタイプです。 プロシージャーBが期待する戻り値と引数の形式がここで指定されるわけですね。 今度はC++のクラスの動作をお役所の仕事に置き換えると… 住民票がほしいとします。 適切なお役所を指定しないといけません。 <国クラス>を基底クラスとした<県>クラスを規定します。 <国クラス>にはほかにも<法律メンバ変数>や<労働保険省クラス>や<防衛省クラス>なども含んでいますが、今回は関係ないですから、<県クラス>をさらに調べます。 -------------------------<余談> ちなみに、防衛省クラスメンバ変数である「兵器構造体」には所有している兵器のリストが書かれていますが、その情報のほとんどはprotect属性によって、親クラスの<国クラス>以外からのアクセスができなくなっていますw。 そのために必要なアクセス関数として<防衛大臣クラス>も用意されています。たまにマスコミがインタビューをしたりしてぽろっと防衛機密について公表されたりします。予算メンバ変数は公開されているのでpublicですね。体質や慣習は旧帝国時代からのものを引き継いで外部からの圧力では変わらないので、さしずめprivateメンバ変数でしょうかw。 --------------------------------- そうすると、<市区町村郡クラス>がでてきます。 この下には<市役所クラス>がいます。 <市役所クラス>の下には<住民課メンバ関数>があります。 ここで、あなたは市役所を訪れようとしますが… 市役所を建設しないと訪問しようがありません。 なので、インスタンス(建物)ああらかじめたてられていなければなりません。 でもまあほとんどの場合は建設済みですので問題ありません。 市の名前は鎌倉市と決められていました。 <市役所> .鎌倉市(); これで、鎌倉市役所の中に入れます。 鎌倉市.住民課メンバー関数にアクセスします。 そうすると、住民票がほしいなら住民票申請用紙に名前や住所を書かないといけません。 これが<引数>です。 これには書くための書式も決まってます。省略できる項目もあれば絶対に書かないといけない項目もあります。 その項目にはカタカナでとかヒラガナでとか、漢字の楷書でとか指定もあります。 <市役所> .鎌倉市(住民票申請用紙型 申請書変数 ); この「住民票申請用紙型」が<引数の型>です。 で、申請書に記入して、出てきたものが<住民票>という「戻り値」です。 これにも決まった書式がありますよね?。 これが「住民票型」の「書類 構造体」という戻り値です。 ところがこれにはあらかじめCONST属性が掛けられています。鉛筆書きではない項目ってことですね。 見ることはできますが、追記したりはできません。 というのが結構あって、コンピューターの「戻り値」を直接加工できないような場合もちょくちょくあったりします。

0

int add(int a,int b){ int c; c = a + b; return c; } で説明します、始めの int で関数戻り値の種類を指定します、(void は戻り値が無いの意味) 次の add(int a,int b) の add が関数の名前で、int a,int b にて int値の2つのパラメータが必要を示します int c ; は関数の中だけで使える変数 c を定義します 関数の内容 c=a+b にてa+bをcに代入して、return c にて c の値を戻り値にして関数を終了します よって、d=add(2,3); は、2+3 を d に代入することです Serial.print(add(5,6)); は、5+6 つまり 11 をシリアル出力します 参考プログラム int add(int a,int b){ int c; c = a + b; return c; } void setup(){ Serial.begin(9600); Serial.println(); // 改行 } void loop(){ int d; d = add(2,3); Serial.print(d);Serial.print(" "); Serial.print(add(5,6)); while(1){} // 無限ループ 停止 }

0

oiokwuayyaam_0512さん 1. 電卓で 2 √ を押すと 1.414213562 が戻る。 2. 単語で質問しない。単語は辞書で調べる。