27. C言語

目次へ 前の項目へ次の項目へ

C言語というのは、現在利用者がもっとも多いと思われる高級言語でUNIXやLinux、 WindowsやMacintoshのようなOSもC言語で記述されていますし、先程ずいぶんと利 用したRubyも本体はC言語で書かれています。種々の処理や計算にも使用されます し、汎用性の高い言語です。ここでは、Linux上でフリーのコンパイラである gcc を使う方法について紹介します。

とりあえず作成するソースはC言語の作者である KernighanとRitchieが書いた古典「The C PROGRAMMING LANGUAGE」の 最初にでてくる例題を参考にします。これは、アメリカで通常用いられている温度単位の華氏 (Fahrenheit)により表示された温度を摂氏(Celsius)に変換するプログラムで す。

# include <stdio.h>

main()
{
    int fahr, celsius, lower, upper, step ;
    
    lower = 0;
    upper = 300;
    step = 20;

    fahr = lower;
    while (fahr <= upper) {
        celsius = 5 * (fahr - 32) / 9;
        printf("%d\t%d\n", fahr, celsius);
        fahr += step;
    }
}

これを temp.c という名前で保存したらターミナルでまずコンパイルし ます。

$ gcc temp.c

これにより、カレントディレクトリに a.out というファイルが作成され ていますので、それが実際に動くプログラムになっています。実行は、

$ ./a.out

により行われます。./ というのがファイル名の前についていますが、こ の . はシェルによりカレントディレクトリと解釈される特殊な文字です。 よって、今このディレクトリにある a.out を実行しなさいという命令に なっています。なぜ、そのようなおまじないが必要かは、パスに関係しています。

通常、ターミナルからコマンドを実行するとき、コマンドの本体はそこにはありま せん。コマンドの内容ごとにまとめてある /bin ディレクトリや /usr/X11/bin /usr/bin などのディレクトリに置いてあります。 それらが場所を指定しなくてもうまく動いてくれるのは、パスというそれらにつな がる道筋があらかじめ登録されているためです。それは、

$ export | grep PATH

とターミナルで実行してみると分かります。しかし、今いるカレントディレクトリは そのパスの中に指定されていません。そのため、コマンド実行を行うのに、カレン トディレクトリをわざわざ明示する必要があったわけです。

さて、おまけですが、先程の温度変換プログラムをRubyで書くとどうなるでしょう か。実は、かなり似ていますが、宣言などが不要な分Rubyが楽に書けると思うのは、 身びいき過ぎますでしょうか。

lower = 0
upper = 300
step = 20

fahr = lower
while fahr <= upper
  celsius = 5 * (fahr - 32) / 9
  printf("%d\t%d\n", fahr, celsius)
  fahr += step
end


ページの先頭へ目次へ 前の項目へ次の項目へ