• ベストアンサー

戻り値について

ただ今、c言語の勉強をしている者です。 本を読んでいて分からないところがあったので ご指導して頂ければと書き込みました。 それは、最初と最後のところです。 int main(void) { ・ ・ 処理 ・ ・ return 0; >int main(void) このintというのは 戻り値が整数だと言うことだと思うのですが 戻り値が文字の場合ということも あるということですか? 例えば、 char main(void) ということもあるのでしょうか? また、voidというのは 他の名前にしたらいけないのでしょうか? > return 0; というのは、 正常に終わったら戻り値を0にしろということですか? ご指導して頂ければと思います

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

main 関数は、特殊な関数です。 コンパイラによって多少の例外はあるものの、ユーザが勝手に決めていい関数ではなく、言語仕様で「こうしておいたほうがいい」というのが決まってます。 # 最初に呼び出される関数:呼んでもらうためのお約束がある。 なので、char main(void)になることは通常ありません。 ご自身が作るその他の関数ではchar foo(void)でもかまいません。 その場合は、文字が返る関数になることが多いと思います。 > また、voidというのは他の名前にしたらいけないのでしょうか? voidというのはC言語の予約語ですから、他のものにすると当然意味が変わります。 「関数の引数はないよ」という意味では必ずvoidです。 mainは先ほどのようにルールが決まっている特殊な関数で、 voidにしない場合は通常以下のようにすることになっています。 int main(int argc, char* argv[]) この際、argc, argvの名前は別のものでもかまいませんが、 慣習的にこの名前を使うことが多いです。 他の関数の引数は基本的にユーザが決めてかまいません。 > return 0; これも、mainが正常に終わったときは0を返すのが慣習です。 # EXIT_SUCCESS マクロなどもありますがこれはマイナーです。

wee
質問者

お礼

ご返事有り難うございました。 とても参考になりました。

その他の回答 (4)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.5

#4の方の捕捉。 統一定義というか、一応Cの標準ヘッダにおいて、EXIT_FAILUREというマクロが標準定義されています。 これは、その動作環境でとにかくエラー/失敗と判断される値になっていると期待できるものです。 ただし、これ以外を返してはいけないというものではありませんし、EXIT_FAILUREを返したところで何もおきないOSも世の中にはあります。それ以外の値を、いろいろなエラーコードに使っているものもあります。 WindowsやLinuxなどのPCにおいては、 mainから戻した値は、呼び出し元がいた場合にのみ意味を持ちますので、呼び出し元がその値を堂判断するかですね。 # 単純に0以外だったらエラーコード、とか思ってるのも多そうです。

wee
質問者

お礼

ご返事有り難うございました。 簡単なことではないかと思っていましたが なかなか奥が深いものなんですね。 とても参考になりました。

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.4

> 他のプログラムはmainから派生する形になると > 考えても宜しいですか? 「派生する」という意味が不明確ですね。「他の関数は元をたどれば main() から呼ばれたのか?」という問いならほとんど「そうです」となります。ほとんど、と書いたのは割り込みのコールバック、イベントハンドラなどは違うからです。これらの関数はOSが何かが起こったことを通知するために呼び出す関数です。しかし、「c言語の勉強をしている者です」とのことでしたら気にする必要はないと思います。 > >そうです。 > ということは、 > エラーの場合はどのようになるのでしょうか? 0以外の値になります。値については統一した定義は無いと思います。

wee
質問者

お礼

ご返事有り難うございました。 とても参考になりました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

charは文字というより1バイトの整数と覚えておいたほうがいいと思います voidに関してはmain()関数では int main(int argc, char *argv[]) とするのが本来の書き方です。 引数を使わない場合はvoidでもエラーにはなりませんが 他の名前ではだめでしょう

  • moritan2
  • ベストアンサー率25% (168/670)
回答No.1

main()の型はintとというのは決まりです。 従って > char main(void) > ということもあるのでしょうか? はおそらくエラーか警告になると思います。 >> return 0; >というのは、 >正常に終わったら戻り値を0にしろということですか? そうです。

wee
質問者

補足

こんにちは。 とっても分かりやすい説明 ありがとうございました。 >main()の型はintとというのは決まりです。 mainというのは 一番最初に始まるプログラム (この言い方が正しいかどうか分かりませんが…) ですよね? 他のプログラムはmainから派生する形になると 考えても宜しいですか? >そうです。 ということは、 エラーの場合はどのようになるのでしょうか?