C の基本:プログラムの作成
コンパイル
「C の前に:OSとプログラム」で説明した様に、C 言語のソースコードはコンパイルによって CPU が理解できる機械語へと変換されます。
これを CPU に読ませれば作ったプログラムを実行できる訳ですが、CPU などの支配権はカーネルが握っているので、その処理はカーネルにお願いする必要があります。
つまり変換された機械語に加え、それを実行する為のカーネル向けの情報(メモリ上にどう配置するか、どこから実行するか等)を纏めたものこそがコンパイラの出力する実行可能ファイル(executable file)です。
実践
次のコードは「hello, world」と表示するだけの簡単なものです。
#include <stdio.h> | |
int main(void) | |
{ | |
printf("hello, world\n"); /* 文字の表示 */ | |
return 0; | |
} |
/*と*/で囲まれた部分はコメント(comment)と言い、コンパイラからは無視されます。//に続けてコメントを書く事もできますが、
printf("hello, world\n"); // 文字の表示 |
これは正式には C99 からの機能です。(昔からあった書き方らしく C99 以前のコンパイラでも使えますが。)
コメントは罪深くも分かり難いコードを書いてしまった時に書くもので(「礼儀作法:可読性」を参照)、また普通は日本語で書くなんて事もありません。このサイトで日本語のコメントがあったらそれはコードの一部としてではなく、読者への捕捉として書いていると思って下さい。実際のコードに初心者向けの事を書いてもウザがられるだけです。
さて上のコードを hello.c などの名前で保存し、これをコンパイラに渡します。
gccの場合、何も問題が無ければ無言で終わります。これでソースコードに対してコンパイルが行われ、実行可能ファイルが出力されます。
デフォルトでの出力ファイルは UNIX 系の場合「a.out」、Windows の場合「a.exe」になります。(これは gcc や clang の場合で、msvc では入力ファイル名を受け継ぎます。Windows 版の clang もclang-clとしてフロントエンドを msvc に合わせているので、同じ動作になります。)
$ a.outまたは> a.eveとして実行すれば
と表示されるでしょう。