• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:void main()って誰が最初?:ANSI-C)

void main()って誰が最初?:ANSI-C

toysmithの回答

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.4

実際に「プログラミングする人」に関してではなく、「参考書/教則本の著者」に関する話題ですよね。 実際のプログラミングの現場では“OS固有の機能”または“コンパイラのベンダー拡張”によってvoid型のmainが許容されることが多いと思います。 その点はchaosheroさんもご存知だから「ANSI-C言語に関することです。 ベンダー拡張やOS固有機能は除外してください。 」と断っておられるのでしょう。 歴史的に見た場合amajunさんのおっしゃることが答えになると思います。 と言っても私も第一版は捨ててしまっているので確認したわけではありません(しかもうろ覚え)。 > これだけ資料が揃っているのにいまだにvoid main(void)と書かれた書籍がイッパイあるのはなぜなんでしょう? この部分は単純です。 著者が良く理解できていないからです。 hosted environmentとfree standing environmentの違うすら理解できていないのでしょう。 本来、この手の人たちは教則本を書くべきではないのですが「言葉がやさしい」、「図や絵が多い」といった(本質的でない)理由によって受け入れられてしまっているため発行部数が伸びてしまい、「『発行部数の多い本は良い本だろう』という誤解を生んでまた売れる」という悪循環が生まれてしまうのでしょう。 また、本来チェック機間である筈の出版社がチェックしきれていないのも問題です。 より大きな問題として「コンピュータ教育している人たちが理解できていないので教科書にその手の本を採用する」ということもあります。 私は専門学校でC/C++を教えているのですが、担当が2年生であること&非常勤であることで1年生の教科書選定に加わることが出来ません。 結果として、毎年最初の授業で「1年生の教科書は捨てろ!1年生の授業と2年生の授業の内容が違ったら俺が正しい!」という洗脳からはじめるハメになっています。 2年生の最初の1ヶ月でCの文法を全て教えなおすという異常な状況です。 教科書/教則本は「実際的なもの」と「原則的なもの」があるべきです。 その意味で『ANSI-C準拠』と書かれたものにvoid main(void)とあれば、その本は駆逐されるべきでしょう。 実際的な本(特定のコンパイラの解説書など)では許されると思います。 完全に余談ですが… 今年の1年生の教科書は『ANSI-C準拠』と書かれていますがターゲットコンパイラがLSI-C86(ANSI-Cに完全準拠してないって!)でvoid main(void)と書かれたサンプルが載っています。

関連するQ&A

  • int main()、void main()、void main(void)、int main(void)

    今日、大学でC言語の講義の時間、先生が、 #include <stdio.h> void main(void){ } と宣言してプログラムを書くと教えていました。 main関数には、 main() void main() void main( void ) int main() int main( void ) と、人によりいくつかの描き方があったりします。 どれが本当は正しいのでしょうか? void mainはすべきではないとなんかの本で読んだのですが・・。

  • int main(void)

    C言語の問題集をやっているのですが、 本にはmain関数の最初にint main(void)のような書き方が してあります。 学校ではmain() と習ったのですが、本には上のようにかいてあります。 どのように違うのでしょうか? というかmain関数のところに引数が入っている意味がわかりません。 どういうことがというと(void)ってなんですか? またint mainというのはint型の関数だと思うのですが、 なかではdouble型とかも使えます。 お願いします。

  • int main(void) の意味について教えて下さい

     お早う御座います、Cの初心者です、宜しくお願いします。  最初にmain関数は、「int main(void)」という風に始まりますが 、main関数がstring型をとる場合とか、実際に他の関数から呼ばれる場合は有るのでしょうか。

  • main()とint main(void)の違い

    最初main()と習ったのですが、最近学校でmain()ではなくint main(void)を使うように なりました。 どのように違うのでしょうか? main関数のところに引数が入っている意味がわかりません。 (void)ってなんですか? そもそも引数って何ですか? あと、プログラムの最後にreturn(0)って書いてあるんですが、これはどういう意味ですか? 回答よろしくお願いします。

  • int型 void型について

    C初心者です。 「int main(voido)」や「void main(void)」がよくわかりません。 int、void、(void)とは返り値を返す、返さないということが理解できません。小学生でもわかる説明をしていただけないでしょうか? よろしくお願いいたします。 

  • Cの書式

    プログラミング初めたばかりの者です そこでCの書式について疑問に思ったことがあります。Cの書き方にはさまざまな書き方があるようですが一般的にはどのような書き方が好まれるのでしょうか? 例えば int main(void) { } なのか int main(void) { } なのか (i=0;i<5;i++) なのか (i = 0; i < 5; i++) なのか 最近の言語とかだと変数と演算子の間は空白を開けてる場合が多いようですがCでは開けない場合が多いようにも思います。 他人にコードを見せるわけではないのですが知識として覚えて置きたいと思っています。 くだらない質問ですがよろしくお願いします

  • main関数の事についてお聞きします。

    Windowsのプログラムを書くとき、下のようにキッチリ戻り値や引数を書かなくてはならないのに int WINAPI WinMain( HINSTANCE hInstance, // 現在のインスタンスのハンドル HINSTANCE hPrevInstance, // 以前のインスタンスのハンドル LPSTR lpCmdLine, // コマンドライン int nCmdShow // 表示状態 ); C言語で書かれたプログラムは int main(int argc, char *argv[]) ではなく、 int main(void) や void main(void) または int main() や main() だけのモノなど、 いろいろです。 main関数は、関数なのに戻り値や引数を省略して書ける仕様なのは、なぜなのか? ちょっと疑問に思ったのでこちらにお尋ねしました。

  • 一番最初でつまずいてます!!

    Borland C++Compilerをインストールしてプログラミングの勉強をし始めたばかりです。 #include<stdio.h> int main(void) { printf("はじめてのC言語プログラム"); return 0; } と入力してコンパイルすると 「インクルードファイル'stdio.h'をオープンできない」 というエラーがでました。 何度も見直したし、環境変数も合わせてるのになぜでしょうか!?

  • C言語 int main(void) main()

    C言語のmain関数について、質問させていただきます。 私の手元に、林 晴比古さんが執筆された著書、 2007年度版の新C言語入門 スーパービギナー編 (C言語実用マスターシリーズ) [単行本] http://www.amazon.co.jp/gp/product/4797325631/ref=oh_details_o04_s00_i00?ie=UTF8&psc=1 があります。 これと同一の2000年度版の著書、 http://www.amazon.co.jp/%E6%96%B0C%E8%A8%80%E8%AA%9E%E5%85%A5%E9%96%80-%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E7%B7%A8-C%E8%A8%80%E8%AA%9E%E5%AE%9F%E7%94%A8%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%9E%97-%E6%99%B4%E6%AF%94%E5%8F%A4/dp/4797306718/ref=sr_1_cc_1?s=aps&ie=UTF8&qid=1383091260&sr=1-1-catcorr&keywords=%E6%96%B0C%E8%A8%80%E8%AA%9E%E5%85%A5%E9%96%80+%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E7%B7%A8 も、所持しています。 main関数の書き方が、2007年度版の新しい方では、 int main(void) { } と記載されており、 2000年度版の古い方では main() { } と記載されています。 改訂版なので両者を同じページで内容や例題を照らし合わせても、この部分が変わっていることを確認できます。 つまり、2007年度版では、2000年度版では書かかなくてよかった「void」を、一新して記載するようになっています。 ここで質問ですが、両方のやり方で、コンパイルすると両方ともエラーなくきちんと表示されます。しかしこれはどのような理由で変更されたのでしょうか? 詳しい方がいましたら、ご回答よろしくお願い申し上げます。

  •  現在、私は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; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?