見出し画像

C言語教室 第29回 プログラムを走らせるまで

ここまで、C言語のいろいろなプログラムを取り上げてきましたが、C言語は基本的にはコンパイルという操作を行って実行をする言語で、人間が読める形のC言語で書かれたテキストであるソースファイルを、CPUが実行できる命令の集まりに翻訳(コンパイル)して実行ファイルを作成して、それを動かします。

C言語で書かれたソースファイルのファイル名の末尾(拡張子)は”.c”を使います。これをgccなどのコンパイラで指定して、コンパイルします。

#include <stdio.h>
void main() { printf(“hello world\n”); }

samplecode.c

コンパイラに実行ファイル名の指定をしなければ、gcc の場合は”a.out”という名前の実行ファイルが作成されます(エラーがなければ)。これを実行すれば書いたプログラムが動くわけです。

$ gcc samplecode.c
$ ./a.out
hello world

これを今後も使うのであれば、ちゃんと名前を変更しても良いですし、コンパイラに実行ファイル名を指定することで、好きな名前の実行ファイルを作ることも出来ます。 

$ mv a.out samplecode
$ gcc -o samplecode samplecode.c

unix(linux)の場合は、実行ファイルの拡張子は無いことが普通なのですが、windows であれば、実行ファイルの拡張子は “.exe” になるようにしておきます。この辺りはOSやコンパイラごとにいろいろなお約束があるので、ご自身の環境については調べてみておいてください。教室では原則として linux を前提にします。


さて、ひとつのファイルからひとつの実行ファイルを作るだけであれば、これだけで良いのですが、プログラムが大きくなったり、以前に作ったプログラムを再利用しようとすれば、プログラムのファイルが複数になることもあります。コンパイラでこれらのファイルをすべて指定して実行ファイルを作ることも出来ます。

gcc -o samolecode *.c

この例ではカレントディレクトリにあるすべての”.c”で終わるファイルをコンパイルして、実行ファイルを作ります。このとき、すべての”.c”の中にmainという名前の関数はひとつしか無いようにしてください。2つ以上の同じ名前の関数がある(例外はありますが)とコンパイルの際にエラーになります。そして必ず main 関数から実行が始まります。

コンパイルの手順をもう少し細かく見ると、”.c”で終わるC言語のプログラムが書かれたソースファイルは、いったん”.o”で終わる「オブジェクトファイル」という中間的なファイルが作成されます。すべての”.c”が”.o”にコンパイルされた後に「リンク」という処理が行われてひとつの実行ファイルが出来上がります。

$ ls
file1.c    file2.c
$ gcc -o file file1.c file2.c

file1.c ⇒ file1.o
file2.c ⇒  file2.o
file1.o, file2.o ⇒ file

この順でファイルが作られる

実行ファイルを走らせる際には、もう”.c”も”.o”も不要なので、ソースファイルはともかくオブジェクトファイルは再度コンパイルすれば作成されるので、消してしまっても困ることはありません。

但し、file1.c のみを修正した場合、

gcc -o file file1.c file2.o

と指定することで、file2.c から file2.o をコンパイルする手順を飛ばすことが出来るので、時間とCPUの手間の節約になります。これらの操作はコマンドラインでは make であるとか build というコマンドが自動的に考えてくれるので、さほど気にしなくても大丈夫ですが、このように中間的なファイルを作ることをしているのだとだけ理解してください。

統合環境などと呼ばれるような開発環境を使っている場合も、コンパイルして実行するための手順は自動的にやってくれると思いますので、ご自身の環境で、どのようにソースファイルを実行できる形にコンパイルして走らせるのかを、再度、確認して、複数のソースファイルを扱えるようにしておいてください。

make などの仕組みと、その設定に関してはいずれ補足するつもりです。

今回は課題はありません。次回は、複数のファイルに分ける際の注意点を説明します。

ヘッダ画像は、Bing Image Creator で作成したものを加工しました。

#C言語 #プログラミング講座 #コンパイル #リンク #make #build  

この記事が気に入ったらサポートをしてみませんか?