質問: C言語 入門
回答: main関数の書き方は何種類かありますが、 void main( void ){ ... } のような書き方は参考にしないでください。 相当古い情報です。(参考の参考の参考程度ならOKだけど) >> というかついでに、「gcc」とか「./a.out」ってなんですか まずその質問に答える前に、『コンピュータの歴史』等を学びましょうか。 詳しい情報は他のサイトに譲ります。あくまでイメージ程度のものとして読んでください。 えーっと、まず、コンピュータは元々、軍事目的でした。 たとえば弾道計算や暗号解読とかです。 人間が手作業で暗号解読をすることは可能ですが、 現実的じゃないです。暗号方式や時代によってはたかだか『おはよう』程度でも1カ月とかそこらまでかかります。(1時間ぐらいでできることもあるが) 面倒なので機械にまかせましょう。ってことになりました。 でも機械は0と1からなる機械語(machine language) しか認識できません。 0011101110100000111111100001101101000... のようなものです。 簡単に言えば、ON/OFFの切り替えで認識している状態。 でもこれは人間にとっては相当厳しい。(目がきつい......) なのでアセンブラっていう言語とかが開発されました。 でもまだ人間にとって面倒な部分があったので、C言語とかそういう言語が開発されました。(構造化プログラミング) でもまだ問題があったのでオブジェクト指向っていう考え方を取り入れたC++とかのような言語が開発されました。 で、そうすると、ここまで読んだら気づくと思いますが、 『俺たちが書いたコードとやらはコンピュータは認識できねーんじゃねーか!!!』ってなりますよね。 だって機械(コンピュータ)が認識できるのは機械語だけなので。 そこで機械が認識できるように機械語に翻訳する処理が必要になりますね。 その翻訳したり情報を集めたりとかのようにして機械が認識できる状態にすることを『コンパイル』(compile)と言います。 そしてC言語で、MinGWやUNIXに付属しているgccとかを使う場合は、このgccがコンパイルを行うソフトになります。 コンパイルを行うソフトなので『コンパイラ』(compiler)と言います。 VC++とかだと内蔵のヤツがあったはずです。 そして、 $ gcc main.c のようにすると、『(生成される)実行ファイルが指定されない場合』は、 UNIX系だと a.out で、Windows だと main.exe のようなファイル名になっています。(Windowsの場合は ソースコードのファイル名が使われる) つまり、コンパイルされた、実行ファイル( 実行できるソフトのようなもの )です。 要するに、 コンパイル: C言語等の言語から機械が認識できる言語に翻訳すること コンパイラ: コンパイルするソフトのこと a.out: 生成されたプログラム ちなみに Windows上でgccを使ってコンパイルするときに実行ファイル名を決める場合は $ gcc -o MainTest.exe main.c のように "-o <ファイル名>" を付けてコンパイルすれば自分で決めることが出来ます。 UNIX系でもできるとは思いますが、デフォルトが "a.out" って感じで *.out なので拡張子が違います。そのため詳しくはわかりませんが。 (私はWindowsユーザなので) >> Visual Studio Codeも、言われるがままに入れましたが、いったいなんなのか分かっていません。 Vsiual Studio Code や Visual C++ 等のようなものは開発環境(IDE)といいます。 これは極論すれば、 IDE = コンパイラ + テキストエディタ + その他ツール を統括したソフトのようなものです。 Windows上だと MinGW のようなものであれば コンパイラや stdio.h とかのような必要最低限のファイルのみです。 コードを書くにはWindows付属のメモ帳なりTeraPad, サクラエディタのようなテキストエディタ( テキストファイルを編集するソフト ) で書いてから、コンパイラに噛ませます。 UNIXのことはあまりわからないので割愛しますが、ソースコードは単なるテキストファイルなのでテキストエディタで書いてからコンパイラに噛ませます。 それをIDEは コンパイラと テキストエディタをひとまとめにして管理しやすくしたソフトです。 実際には『必要なファイルを自動的にリンクする』とかのようなツールが含まれています。 このIDEにはいくつかあり、その一つがVisual Studio Codeです。