• ベストアンサー

return文について

C言語を独学で勉強中です。 最初から分からないのがあったので、質問させていただきます。 #include <stdio.h> main() { printf("Hello World!!\n"); return(0); } return(0)を記入しなくてもエラーはでないのに、 なぜ必要なんですか? 参考書には何も書いてないので分かりません。 よろしくお願いします。

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.9

> >まず、返却値の型のintは省略することができません(少なくとも現行規格では)。 > お二方、古い話を書かないでください。 > 現行規格のC99またはJISCのX3010:2003ではintでなくても良くなっています。 それはmain関数が処理系定義の形式でも構わないということであって、返却値の型であるintという記述を省略してよいかどうかとは、まったく別の話です。 > 処理系云々の話や、規格云々はあくまでもCはこうあるべき > という枠のようなもので、実際に規格に沿ったコンパイラは > それほど多くないので、厳密にそこまでこだわる必要は > 無いかもしれませんが。(とくにC99は。。。) 私もこの意見には賛成です。 だからこそ、自分が使っている、あるいは対象としている処理系が何であるかを明確にする必要があります。

kokoro24
質問者

お礼

回答ありがとうございます。 質問する前にもう少しC言語に対して勉強するべきだったと 反省しています。親切に回答していただいたのに、勉強不足 で申し訳ありませんでした。 回答なんですが、return0;が無いと明確さに欠けるので、 記述したほうがいいということですよね。 見やすく明確に!ですね。 分からないことがあるときはまた質問させていただきます。 ありがとうございました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (9)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.10

> return(0)を記入しなくてもエラーはでないのに、 コンパイル時に警告が出ませんか? 出たのであれば、極力出ないようにする方がよいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.8

昔のCでは関数に戻り値型を書かない場合int型となります。 同じように引数を書かないと無しと見なされます。 エラーがでるか警告が出るか何もでないかは、 処理系の設定や処理系そのものに依存すると思いますが 少なくともmain()はこの場合だとint型を返す引数を取らない関数 (int main(void))として処理されるのでreturn(0)としているのだと 思います。 ということで、何故必要かというと、 「mainに戻り値があるとしているから必要。」 ということに成ると思います。 処理系云々の話や、規格云々はあくまでもCはこうあるべき という枠のようなもので、実際に規格に沿ったコンパイラは それほど多くないので、厳密にそこまでこだわる必要は 無いかもしれませんが。(とくにC99は。。。)

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.7

>現行規格のC99またはJISCのX3010:2003ではintでなくても良くなっています。 まあ、確かにそうなんですが、それもある意味処理系依存ですので。

全文を見る
すると、全ての回答が全文表示されます。
  • TT414
  • ベストアンサー率18% (72/384)
回答No.6

>まず、返却値の型のintは省略することができません(少なくとも現行規格では)。 >その際、main関数の型は以下のどちらかにすることと決められました。 お二方、古い話を書かないでください。 現行規格のC99またはJISCのX3010:2003ではintでなくても良くなっています。

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.5

Cが生まれたころまでさかのぼると、「シェルに返すため」であったと思います。 その後、Cがいろいろなプラットフォームに移植され、規格が整備されるにつれて、「シェルに返すため」という理由では処理系依存になってしまうため、main関数の意味についても定義しなおされることとなりました。 その際、main関数の型は以下のどちらかにすることと決められました。 int main(void); int main(int argc, char *argv[]); どちらの場合でも、戻り値を持つことになるので、return文は省略できないのです。 なぜ、必ず戻り値を持つように決めたのかは決めた本人に聞かないとわかりません。まあ歴史的しがらみと考えてもいいんじゃないかと思います。 なお、処理系によっては、 void main(); というmain関数を許すものもあります。しかし、これはで処理系依存になってしまいますから、あまりおすすめできる書き方ではありません。 なんとなく無駄っぽくても、 return 0; と書いておくのが行儀のいいプログラムといえるでしょう。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

議論は禁止されているようですが、質問者さんにとっても有益だと思いますので... > 規格で main() 関数に戻り値が必要だと決められている意図は、プログラムの呼び出し元に結果を通知するためだと私は理解しています。 必ずしもそうではありません。 main関数は再帰的に呼び出すことができますから、その場合には、返却値をどう扱うかは呼出し元の関数が決めることであって、シェルは一切関係ありません。 最初のmain関数の呼出しからの返却値に関しては、呼び出し元で使えるようにすることを想定しているのは確かです。しかし、それがシェルであるとは限りません。プログラムがシェルから呼び出されるかどうか、仮にシェルから呼び出されたとしても、終了コードを利用するかどうかは、完全に環境に依存しています。 質問者さんが環境ないしは処理系を指定していない状況であれば、特定の環境にしか適用できない回答をしても意味をなしません。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

ANo.2 氏の回答は要するに「規格で決まっているから必要」ということで、少々味気ないように感ぜられます。 規格で main() 関数に戻り値が必要だと決められている意図は、プログラムの呼び出し元に結果を通知するためだと私は理解しています。

全文を見る
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

まず、返却値の型のintは省略することができません(少なくとも現行規格では)。 そして、return文が必要な理由ですが、返却値の型がvoidでない関数には、return文を記述するのが原則だからです。 main関数に限り、return文を記述しなければreturn 0;を記述したものとして扱われます(旧規格では異なります)。しかし、単なる書き忘れなのかどうかが分からなくなりますから、作法としてはきちんと記述する方が望ましいのです。 なお、シェル云々の話は処理系を特定しなければ意味をなしません。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>return(0)を記入しなくてもエラーはでないのに、なぜ必要なんですか? そのプログラムを起動したシェルに正常終了を伝えるため。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • Visual C++ 2008 Express Edition

    Visual C++ 2008 Express Editionをダウンロードしたのですが、使い方が全く分かりません。C言語を学習しています。 例えば #include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } というようなプログラミングを実行するにはどうすればいいでしょうか

  •  プログラミングで上から下に処理とは

     こんばんは 今、再び、C言語やJava言語のプログラミングの勉強を始めました。 そこで疑問に感じたのですが #include <stdio.h> int main() { printf("上から\n"); printf("Hello World\n"); printf("下へと処理される\n"); return 0; } こうやって上から下へと処理する方式をなんて呼ぶんでしょうか? ど忘れしてしまってどうしても気になって夜も眠れません。 逐次実行方式なんて名前じゃないし、なんて呼ぶか忘れてしましました。 こんな私にご教授ください

  • C++のコンパイルエラーが

    おこります。 --------------------------------- #include <stdio.h> int main(void) { printf("hello, world\n"); return 0; } -------------------------------------- をコンパイルするのですができません。 以下のエラーが出ます。 --------------------------------------- エラー E2209 sample.c 1: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample.c 5: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** -------------------------------------

  • return 0; return 1; まで同じ

    #include <stdio.h> int main() { printf("%d %c\n", 65, 65); return 0; }  コンパイル後は 65 A  return 1;も同じでした。 しかし  return 2;すると  Exited: ExitFailure 2  終了しました:出口の失敗2 となります。  2以上でしたら、出口が塞がるのでろうぐらいしかわかりません!?    どんなバクなのでしょうか!?  よろしくお願いします。

  • VisualC++ ビルド失敗

    #include<stdio.h> int main(){ printf("Hello World\n"); return 0; cin.ignore(); } >>cin.ignore(); これで画面がすぐに消えないようにしたいのですが、定義されてない識別子と出ます。 教えてください・・・よろしくお願いします。

  • C言語プログラミングの文字列を出力するプログラムについて

    ちょっとお聞きしたいのですが、 #include<stdio.h> void main(void) { printf("Hello World\n"); } と書いてコンパイルしたら インクルードファイル ’stdio.h’をオープンできない って出て Hello Worldってでない、、、 ちゃんとBorlandもダウンロードしたしcd設定もしたんだけど、 何が悪いのかわかりません。

  • c言語始めようと思って挑戦しています

    c言語に必要なソフト eclipseのプラグインのc言語のやつと visiual c++ 2008 express edition が一応あります。 それで一番 有名らしい #include <stdio.h> int main(void) { printf("hello, world\n"); return 0; } がビルドエラーになります。 上の二つのソフト以外になにか必要なものがあるのでしょうか? かなりの初心者です。

  • C言語について大変初歩的なことなのですが…

    先日C言語でのプログラミングを勉強し始めようと思いたち、 「世界一わかりやすいCプログラミングの授業」という本を買ったのですが、 書いてあった、 #include <stdio.h> main() { printf("hello,world\n"); } というプログラムを作ったのですが、エラーが起きました。 そこで「C言語入門」と検索し調べたサイトでは、 mainの前にintと入っていたのでそうしてみたところエラーがおきませんでした。 本が間違っているとは思えないのですが、これはどういう事でしょうか、教えてください。 まだなんの知識もないのでお手数ですがそこを考慮していただくとありがたいです。