わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

先頭に「./」をつけるとき,つけないとき

試験は2月9日に実施し,無事終了しました.
採点はこれからです.
そしてやっと,試験に関係する話題も含めて,Cプログラミングのことが自由に書けるようになります….
ということで,授業中にも少し説明しましたが,「./」について.
コンパイルするときの「cc」や「make」,デバッガを使うときの「gdb」などは,最初に「./」をつけません.
コンパイルしてできたファイルを実行するときには,「./a.out」のように,最初に「./」をつけます.これなしで「a.out」とした場合,実行できる環境もあれば,できない環境もあります.
「./」をつけるかつけないかは,コンパイルしたファイルかそうでないか…ではありません*1.「実行ファイルが,カレントディレクトリにあるかないか」によって決まります.
特に引数をつけずにコンパイルすると,a.outが,カレントディレクトリに作られます.そしてそのファイルを使って実行するなら,「./a.out」と書くわけです.
ccもmakeもgdbも実体はファイルで,カレントディレクトリとは異なるディレクトリにあります.例えば,「type cc」と実行してみましょう*2.これで,「cc」の実行ファイルが,どこにあるかが分かります.私の実行環境では,/usr/bin/cc と出てきます.次に,「ls -l /usr/bin/cc」を実行すると,このファイルの所有者,ファイルサイズなどが分かります.
なぜ「cc」なのに「/usr/bin/cc」なのかというと,これは,コマンドサーチパスというものによります.環境変数PATHの情報です.詳細はとりあえず省略.
Linux環境では通常,カレントディレクトリは,コマンドサーチパスに含まれません.もし含まれているなら,「./」をつけずに「a.out」だけで,実行することができます.『これなしで「a.out」とした場合,実行できる環境もあれば,できない環境もあります.』と書いたのは,そういう事情からです.

*1:ccもmakeもgdbも,だれかがコンパイルして作られた実行ファイルです.自分でコンパイルしてみたいなら,Gentoo Linuxを試してみましょう.

*2:エラーが出たら,「which cc」を実行しましょう.