情報メディア学科 UNIXプラクティス
はじめての C プログラム

 

- プログラミングの流れ

Linux 上で C言語によるプログラムの作成と実行を行う。 プログラムの内容についての理解は置いておいて、 プログラムの作成を体験することから始めよう。

ここでの説明では、C言語 のプログラム作成・実行環境である「gcc」が 既にインストールされていることとする (Linux には通常 gcc が含まれている) 。 また、作業用のディレクトリは ~/c-practice ディレクトリとして説明する。 (~/c-practice と異なる場合、それぞれの環境に応じて各自読み替えること。)

プログラムの作成と実行は次のようなステップを踏むことになる。

  1. プログラムの作成

    Emacs などを用い、テキスト形式でプログラムを作成する。 テキスト形式で書かれたプログラムのことを「ソースコード (source code) 」と呼ぶことがある。

  2. コンパイル

    ソースコードはコンピュータ上で直接実行することができない。 プログラムの実行に先立ち、 コンピュータが理解できる形式に変換する必要がある。 この変換を「コンパイル (compile) 」と呼び、 変換を行うソフトウェアを「コンパイラ (compiler) 」と呼ぶ。 具体的には gcc コマンドでプログラムをコンパイルする。

  3. デバッグ

    プログラムに誤りがあった場合、コンパイラはエラーを報告する。 エラーが発生した場合、エラーメッセージに従い ソースコードを修正し再度コンパイルを行う。

  4. 実行

    コンパイルされたプログラムを実行する。 具体的には、プログラムのコンパイル結果のファイルをコマンド入力として直接指定する。

- プログラミング体験
  1. プログラムの作成
  2. まず、以下のようなコマンドで ~/c-program ディレクトリに移動する。

    $ cd
    $ mkdir   c-program
    $ cd   c-program

    Emacs を用い、実際にプログラムを入力してみよう。 ファイル名は Hello.c とする。 それでは、以下のように Emacs を起動する。

    $ emacs   Hello.c   &

    次に、Emacs に次のようなプログラムを入力しよう。 また、 C では大文字と小文字を区別して扱うので注意。

    入力が終わったら、保存 (C-x, C-s) する。 Emacs の起動時にファイル名を指定しなかった場合、 最下行でファイル名の指定が求められるので、 Hello.c と入力する。

    # include < stdio.h >
    int main () {
      printf("Hello!!\n");
      return 0;
    }
    

    これは、単に「Hello!!」 と表示するだけの簡単なプログラムである。 "\n"は改行を意味するのだが、内容は気にしないでまずは実行してみよう。

  3. コンパイル
  4. コンパイルに先立ち ls コマンドで、 Hello.c が作成されているか確認しておこう。 もし表示されていない場合、作業ディレクトリを確認すること。

    $ ls
    Hello.c

    ここで Hello.c~ や #Hello.c# などが表示されることがある。 Hello.c~ は Emacs が作成した編集前のバックアップファイル、 #Hellow.c# は Emacs が強制終了されたときに編集中だった内容である。

    それでは、次のように javac コマンドを用い、 プログラムをコンパイルする。

    $ gcc   -o   Hello   Hello.c  

    このコマンドは、C言語のソースファイル Hello.c をコンパイルし、コンパイル結果 (実行形式)を Hello.o という名のファイルにするという意味である。

    プログラムに何も問題がなくコンパイルが正常に行われた場合、 何も表示されない。

    プログラムに誤りがあると、例えば次のようなエラーメッセージが表示される。

    $ gcc   -o   Hello   Hello.c  
    /tmp/ccaj28f0.o(.text+0x19): In function 'main' :
    :undefined reference to 'print'
    collect2: ld はステータス 1 で終了しました

    エラーが発生した場合、エラーメッセージを良く読んで、 Emacs に戻りプログラムを修正する。

  5. 実行
  6. プログラムのコンパイルがうまく行っていれば、 以下のように ls でファイル一覧を表示させると、 Hello というファイルができているはずである。 Hello が無い場合、コンパイルがうまくいっていない。

    $ ls
    Hello*   Hello.c

    gcc は javac とは異なり、マシンで直接実行可能なコード(実行形式) を生成する事が出来る。ls した時に Hello に付される * 印は直接実行可能 である事を示している。

    それでは先程のプログラムを実行してみよう。

    コマンドプロンプトの直後に、実行したいプログラムの名前をコマンドのように直接指定する。 ただし、実行形式のファイルを指定する際には、どのディレクトリにあるファイルかを シェルに知らせる必要がある。今回の場合、現在作業中のディレクトリにあるファイルで あるので、ファイル名の前にカレントディレクトリである事を明示する。

    $ ./Hello
    Hello!!

    ここで Hello!! と表示されれば成功である。 実行時にエラーが発生した場合にも、 画面にエラーメッセージが表示される。

    なお、よくある間違いは、ディレクトリの指定忘れである。 この例では、もし、./ を指定せずに下記のように実行すると、そのような プログラムは存在しないという意味のエラーメッセージが出力される。

    $ Hello
    bash: Hello: command not found


UNIXプラクティス > はじめての Java プログラム
東京電機大学 未来科学部 情報メディア学科