return -1 ???

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

return -1 ???

#1

投稿記事 by » 18年前

初めまして、幻といいます!
最近Cを身に付けたくてプログミングを始めた初心者です

参考書を片手に必死こいて勉強してます^^
ただその中のサンプルプログラムで分からない事があったので質問させてください

コマンドライン引数という単元のサンプルに「return 0;」と「return -1;」というのがありました。
「return 0;」の方は、それまでのプログラムで何度も出てきたのですが 、「return -1;」はいきなり出てきて説明も載っていませんでした。
「0」と「-1」で処理がどのように変わってくるのでしょうか?

お願いします

管理人

Re:return -1 ???

#2

投稿記事 by 管理人 » 18年前

関数を一つ自分で作れるようになるとその意味が分かると思います。
きっとその疑問をお持ちだと言う事は関数を作ったことがまだ無いせいだと思います。
現在どの辺りまで勉強なさっているのかわかりませんが、

http://www5c.biglobe.ne.jp/~ecb/c/c00.html

この7章を読むとその意味がわかります。

答えだけ言うと、その関数を呼び出した部分にその数字が返されるわけです。
return 0;
とは基本的に正常終了を意味します。
returnという言葉から推測できるように、呼び出された部分に値を返すということです。
return 0では0を関数が終了した時に返します。
プログラムで「0が返ってきたら正常終了なので、何もエラーを起こさなくていい」と書いておけば、0が返ってきた時、何もエラーはおきません。
一方「-1が返ってきたら異常終了なので、エラーを起こすように」と書いておけば、-1が返ってきた時、エラーを起こすことが出来ます。

そのプログラムを見るときっとその部分はエラー処理になっているのではないかと思います。

一つサンプルを作ってみました。
そのままコピーして実行してみてください。
そして、
act関数内の、return -1の部分をreturn 0;に変更して再度実行してみてください。
結果が変わるはずです。
#include <stdio.h>

int act(){
	return -1;
}

void main(){
	int i;
	i = act();

	if(i==0)
		printf("正常終了です。");
	if(i==-1)
		printf("異常終了です。");
}
 
きっと詳しい使い方は7章辺りをよく読んで見ないとわからないでしょうけど、自作関数部をまだ勉強していないならここまで深く考えなくてもいいと思います。

Re:return -1 ???

#3

投稿記事 by » 18年前

>管理人さん

用意していただいたソース実行しました。
-1では異常終了、0では正常終了と出力されました。
確かに参考書のサンプルを改めて見てみると、return -1の箇所はエラー処理となっていました。
これで疑問が解けました、ありがとうございますm(_ _)m

これから分からないところが出てくると思いますので、その際はまたお願いします^^



あと参考に聞いておきたいのですが、管理人さんはプログミング初心者の頃の勉強法はどのようにしていましたか?
僕は参考書の説明読む→載っているサンプルを打って実行結果を確かめる→自分で似たようなプログラムを作ってみる(物凄く簡単なヤツですけど…)といった感じにやっているんですが、このやり方で良いのか悪いのか分かりません…。
他の方々も宜しければ教えてください、お願いします。

管理人

Re:return -1 ???

#4

投稿記事 by 管理人 » 18年前

初心者の頃というか今も十分初心者ですが、それでもよろしければお書きしますm(_ _)m

私は最初、

参考書や入門サイトをダラダラ読む→読んで解った気になる→実際書いてみるとさっぱり。

この繰り返しでした。やはりプログラミングは社会のような暗記科目ではなく、数学のように演習で習得する科目だと思うので、実際に自分で書いてみることが何より大事だと思います。
私は上のような勉強法で続けていた時は、面白くも無く、知識もさっぱり付きませんでした。

しかしあるとき、DXライブラリに出会って、こんなにC言語の知識が無くてもゲームが作れるんだということを知り、
毎日何時間も、十数時間もプログラムを書きました。
私は前からずっとゲームが作りたかったので、楽しくて仕方ありませんでした。
それは「勉強」ではなく「趣味」だったので何時間やっても疲れませんでした。
ゲームを作っているうちに、
・構造体の使い方を知った方がよりスムーズにかける
・関数ポインタを使ったほうが便利だ
などがわかり、その都度その分野を勉強しました。

参考書片手にただ目標無く勉強するスタイルは私にあってなかったのですが、自分が好きなことを完成させるために知識を付けたいと思って勉強するスタイルは私にあってました。
好きなことっていうのは全然苦になりませんもんね。

ということで、私の勉強スタイルは、「ゲームを作りながら、必要になったらその都度必要な分野を勉強し、それを生かしてゲームプログラムを作る」というものでした。
ただこれでは、「自分の出来る範囲で作る」ゲームになりがちで、ヒープソートアルゴリズムやスタック、キューなどの知識が付かないので、それは別に勉強しました。

最初のうちは幻さんの勉強スタイルは最良の方法だと思います。
もう少し知識が付いてきたら何か自分の好きなものを作りながら勉強していくと今よりもっと意欲的になれるかもしれません。
私は大学3年の後期から勉強を始めて、現在院1年なので、まだまだ青二才もいいとこですが、私の体験談でしたm(_ _)m

tk-xleader

Re:return -1 ???

#5

投稿記事 by tk-xleader » 18年前

私も本を買ってきたのですが、コンパイラを設定する事ができずに苦労しました。そのため、その間はコンパイルできなかったのですが、結局本読んでも分からずじまいでした。

何かきっかけを持てばかなりかけるようになりますよ。

Re:return -1 ???

#6

投稿記事 by » 18年前

お二方ありがとうございますm(_ _)m

>管理人さん
僕もはっきり言うと一般的な参考書にあるような、出力がただの数字や文字列というのはあまり面白いとも思わないし、僕の性格上長続きしないと思います。
やっぱり何か自分の好きな事や興味のある事を勉強に取り入れると身に付きやすいのかなぁというのが今の思いです。
取り合えず、プログラミングの勉強はこれまで通りのやり方を続けていこうと思います。
それと、僕もゲームは作ってみたいと思っていたので、さっそくここのサイトでゲームプログラミング始めてみました^^
説明が分かりやすいのと、やりたいと思っていたことが出来てとても楽しいです!
これからもどんどん活用させてもらいますね!!


> tkmakwins15さん
同じく^^;
僕が買ったのは「猫でもわかるC言語プログラミング」という本で、完全な入門者用に設定されているのですが、何故かコンパイラの設定の説明が適当で、しかもページの後ろの方に載っていたので最初は気づきもしませんでした;;

閉鎖

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