C言語全体の考え方とは?

このQ&Aのポイント
  • C言語の「int main(){...return 0;}」とは、プログラム全体をひとつの関数と考えている表現です。
  • C言語では戻り値を返さない場合もあるため、return 0;をコメントアウトしてもエラーは出ませんが、警告が表示される可能性があります。
  • C言語の考え方や位置づけは他の言語に比べて分かりにくいことがあります。
回答を見る
  • ベストアンサー

C言語全体の考え方が不明です

 今日は、Cの初心者です、宜しくお願いします。  Cプログラムの「int main(){・・・・return 0;}」 とはどのような意味でしょうか。  これはプログラム全体をひとつの関数(サブルーチン、サブプログラム)と考えているのでしょうか。  また、この「return 0;」をコメントにしても特にエラーは出さないのですが(警告は出てるかも)。  このC言語全体の考え方とはどのようなものでしょうか。  戻り値をとる場合も当然あるのでしょうか。  他の言語から入った者には、何か言語全体のスタンスというか、位置づけみたいなものが非常に分かりにくいです。  宜しくお願いします。 ==================================================== int main() { printf("hello\n"); // return 0; }

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

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

> 他の言語から入った よければ、これまでどんな言語で何を作ってきたのかを補足してください。

その他の回答 (4)

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.5

どんなプログラムも「勝手に一人で動き出す事はない」のです。 必ず「そのプログラムを動かした何か」が存在します。 つまり「どんなプログラムも、何かによって動かされる」のです。 言い換えれば「どんなプログラムも、何かによって、呼び出される」のです。 そして「自分を呼んでくれた何かに、実行した結果を返す」事になるでしょう。 どんなOSでも、プログラムは「呼んで、呼ばれて」なのです(言語は関係ありません) >他の言語から入った者には 「プログラムとは、誰かに呼び出される物である」「呼び出された限りは、結果を返さないとならない」と言う、基本的概念を疎かにしている言語では「呼んで、呼ばれて」と言う概念が希薄です。 そういう言語では、たいてい「他プログラムを呼び出す方法が無い」とか「呼び出し元に結果を返す機構が無い」など「重大な仕様の欠陥」を持っています。 で、C言語では「値を返さない」と言う記述も可能なので「プログラムの終了結果を返しても呼び出し元に結果が返せないOS上で動かす場合」に「結果を返しても無意味だから結果を返さないように記述する」事ができます。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

>「int main(){・・・・return 0;}」とは >これはプログラム全体をひとつの関数 >(サブルーチン、サブプログラム)と考えているのでしょうか。 main関数とはなにかということでしょうか? いま一つ何が知りたいのかちょっと分かりにくいのですが、 まず、「main」というのはC言語の規格上で決められた、 プログラム開始処理において呼び出される関数の名前です。 そして、main関数の型には次の4種が規格に記述されています。 1:int main( void ); 2:int main( int argc, char* argv[] ); 3:1,2の方法と等価な方法(例えばint main( int argc, char** argv );など 4:上記に該当しない処理系定義の方法 つまり、C言語の規格上はmain関数はint型の値を 返さなければならないが処理系によってはint型の 値を返さなくても良い物が存在するだけです。 >「return 0;」をコメントにしても特にエラーは出さない >このC言語全体の考え方とはどのようなものでしょうか プログラムの終了処理については、main関数の戻り値の型が int型以外の場合、実行ホスト環境に戻される終了状態は、 規格では規定されておらず、個々の場合にどんな処理を行うかは 要求されていない為、処理系が独自の対処を行います。 お使いの処理系は不明ですが、その処理系が「たまたま」 戻り値を指定しなかった場合でもエラーにしないという、 処理系であっただけで、C言語規格からすれば、 どの可能性を選択してても良い事になっています。 >戻り値をとる場合も当然あるのでしょうか。 先に書いたとおり、お使いの処理系が「たまたま」戻り値を要求 しなかっただけで戻り値を書かないとエラーになる処理系も 当然存在しますし、一部の処理系では設定でエラーか警告かを 設定できるものも存在します。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>プログラム全体をひとつの関数と考えているのでしょうか。 違います。関数の集合と考えています。"main"だけ特別で、 実行開始点の手続き名です。 関数には型(戻り値の形式)があります。戻り値が無い場合は void と記述します。コンパイラによっては "void main()"と しても良いものもあります。この時は "return;" と書くか、 "return"を省略します。戻り値で宣言したものと違う型のデータを return文に指定するとエラーになります。"int main()"だから、 0(整数)を返して(return文の指定)いるのです。 >他の言語から入った VBは同じように関数の集合です。またScriptはmainが無いだけで、 後は関数ばかりです。明示的な実行開始点があると思えば、これの 方が自然な気がしませんか?

回答No.1

「C言語 入門」等のキーワードで探せば、それなりに分かると思います。 >>これはプログラム全体をひとつの関数(サブルーチン、サブプログラム)と考えているのでしょうか。 main関数はプログラム開始時に最初(勝手)に実行される関数です。 main関数から用意されている関数や自作関数をコールしてプログラムを形成します。 >>この「return 0;」をコメントにしても特にエラーは出さないのですが(警告は出てるかも)。 質問内容に記載されているソースコードだとmain関数はintを返すように宣言されているため、何らかの値を返さないといけないです。 質問内容のソースコードをコンパイルすると警告が発生しているはず(一応コンパイルは正常終了する)です。 しかし、返される値については不定です。 main関数の戻り値をvoid宣言すれば警告も出なくなりますが、C言語とOSとの歴史的関係上、main関数はintの戻り値を返すのが定番となっています。 以上、頑張ってみてください。

htgotk_001
質問者

お礼

おはよう御座います、皆さん回答有り難う御座いました、 まだまだこれから勉強していきます。

関連するQ&A

  • [C言語] main() の後ろ "{"の場所は?

    こんにちは。 C言語のおなじみのプログラムですが、下記2パターンの書き方というか考え方があるんだと思います。 そして、どちらを選ぶかで、いろんなところへ影響することが考えられます。 基本は、どちらなんでしょう? ■パターン1 int main() { printf("Hello World!\n"); return 0; } ■パターン2 int main() { printf("Hello World!\n"); return 0; } たった"}"だけの場所のことですが、皆さんの考え方を伺いたくてスレを立てました。 持論でももちろん結構ですので、よろしくお願いいたします。

  •  現在、私は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言語

    以下のようなhello.cがあります。 include<stdio.h> int main(void) { printf("Hello World! \n"); return 0; } gcc -E hello.c と打つとプリプロセッサが表示されます。 課題はこの中からprintfに関するものを見つけ、読み取れることを説明せよとのことです。 問題の意図と解き方がわかりません。 よろしくお願いします。 環境はwsl ubuntu です。

  • C言語エラー

    C言語をいじっているのですが、16行目と19行目の「型」の前に「;」がありませんと表示されます。 どこをどう改善すればいいか教えてもらえないでしょうか /*遊び半分*/ #include <stdio.h> #include <process.h> int main() { char dear; printf("ああああ\n"); printf("ああああ \n"); scanf_s("%c", &dear); switch (dear){ case 'A04': ; int main(void); { printf("ああああ\n"); int main(void); printf("あああ\n"); printf("あああ\n"); break; system("pause"); return 0; } case 'C34' : printf("\n"); break; case 'E24' : printf("\n"); break; case 'F38' : printf("\n"); break; default: printf("メッセージはありません\n"); break;} 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ってどんな働きをするんですか?

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

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

  • c言語なのですが

    c言語なのですが #include<stdio.h> main() { int a; printf("整数を5回足し算する\n"); scanf("%d %d",&a); printf("a*5=%d\n",a*5); return(0); } でエラーが起こります どこを修正すればいいのでしょうか

  • 私はC言語を習い始めて5日の初心者です。

    私はC言語を習い始めて5日の初心者です。 下記のプログラムが動かないので優しく教えてください。 どうかお願いします。 #include <stdio.h> int main() { int ans1,ans; int total printf("コンビニ行くときは(1:車で 2:自転車で 3:歩いて)行く\n"); scanf("%d",&ans1); printf("1:汗かいた記憶がない 2:たまに汗かく 3:よく汗をかく\n"); scanf("%d",&ans2); total=ans1+ans2; if (total<4) { printf("運動不足です\n"); }else { printf("良く運動していますね\n"); } return(0); }

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

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

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語の課題で分からないところがあり、質問しに来ました。 ユーザから数を受けて、そこまでのフィボナッチ数列を表示させるというプログラムです。 下のソースコード(でいいんですよね?)は正しいやつです。 for文を使って、繰り返しの作業を行うことに成功しましたが、doとwhileに書き換える作業がうまくできません。 どなたか助けてください。 #include<stdio.h> fib(int n) { if(n == 1)return(1); else{ if(n == 2) return (1); else return fib(n-1) + fib(n-2); } } main() { int n, i ; printf("INPUT the number. : "); scanf("%d",&n); for(i=1; i<=n; i++){ printf("F%d = %d\n",i, fib(i)); } }

専門家に質問してみよう