C言語 第1回 "Hello World"

1. はじめに

プログラミング言語の歴史

私たちは日頃、日本語などの言語を用いて情報を伝達するように、コンピュータ0と1で構成される機械語(Machine Language)を用いて情報を処理する。しかし、機械語はCPU(中央処理装置)の種類によって内容が大きく異なることに加え、0と1の組み合わせをルールに則って膨大な量を記述することは困難である。
そこで、人間にも比較的理解しやすいアセンブリ言語(assembly language)を用いて記述し、それを機械語に変換するという仕組みが考案された。アセンブリ言語とは、機械語に1対1で対応する簡略記憶記号(ニーモニック)で記述するプログラミング言語である。その後、アセンブリ言語よりも簡単に複雑な処理を記述できるよう、C言語をはじめとする様々なプログラミング言語が開発されてきた。
アセンブリ言語の例:

main:
    pushl   %ebp
    movl    %esp, %ebp 
    subl    $16, %esp
    movl    $0, -4(%ebp) 
    movl    -4(%ebp), %eax 
    addl    $2, %eax
    movl    %eax, -4(%ebp) 
    movl    $0, %eax
    leave
    ret

auto_storiesコラム

自然言語と人工言語

日本語や英語など、自然発生的にできた言語を自然言語(Natuarl Language)というのに対し、プログラミング言語など、ある情報を伝える目的のために人間が作り出した言語を人工言語(Artificial Language)という。

C言語とは

C言語(C language)とは、1972年にAT&Tベル研究所がUNIXの移植性を高めるために開発されたプログラミング言語で、自然言語に近い形で記述できる高水準言語でありながら、メモリ管理などのハードウェアの制御が行なえる低水準言語としても動作するという特徴を持つ。
名前の由来は、B言語(B language)を後継する言語として開発されたからである。
以下にC言語のソースコード例を挙げるが、現時点で各行の内容を理解する必要はない。

#include <stdio.h>

int calc(int x, int y){
    return x+y;
}
    
int main(void){
    int x = 0;
    int y = 10;
    int ans = calc(x, y);

    printf("%d + %d = %d", x, y, ans);
    return 0;
}
tips_and_updates

POINT

  • コンピュータは機械語という言語で動く。
  • 機械語を人間が扱うのは困難なため、アセンブリ言語やC言語などのプログラミング言語が開発され、それらを後から機械語に変換するという仕組みが考案された。
  • C言語は高水準言語でありながら、メモリなどを直接扱える低水準言語の特徴も持つ。
  • 2. プログラムを実行するまでの流れ

    プログラムを作成することをプログラミング(programming)といい、プログラミング言語で書かれたプログラムをソースコード(source code)またはコードという。一般に、C言語のプログラムを実行するには以下の流れで決まった手順を行う必要がある。

    1. プログラムの作成

    C言語のプログラムは、拡張子が「.c」であるファイルを作成し、テキストエディタなどでソースコードを記述することで作成できる。

    $ touch ファイル名.c

    拡張子とは、ファイルの種類を識別するためにファイル名の末尾に付けられる文字列のことで、.cの他に.txt .exe .xlsx .docxなどがある。この状態のファイルは人間が読み書きをするためのものであるため、このままの形式ではコンピュータは実行できない。

    2. コンパイル

    C言語のプログラムが作成できたら、それを実行できる形にするためにコンパイル(compile)という作業を行う必要がある。コンパイルとは、プログラムを機械語に翻訳(変換)することをいい、C言語の場合C/C++コンパイラ(compiler)というソフトウェアを用いて実行する。
    例として、C言語のファイルをコンパイルするには、以下のようなコマンドを実行すればよい。

    $ gcc ファイル名.c -o 実行ファイル名

    このコマンドの詳しい内容は、後ほど説明する。

    また、この段階でソースファイルの記述に誤りがある場合、画面上にエラーメッセージが表示されるため、デバック(debug)というソースコードの間違いを修正する作業をする必要がある。

    3. プログラムの実行

    上記の手順が終了したら、いよいよプログラムを実行できる状態になる。2. コンパイルで生成された実行ファイル(Executable file)を以下のようなコマンドで指定して実行する。

    $ ./実行ファイル名

    この段階で実行結果か期待通りのものでなければ、再度手順1に戻りソースコードを修正する。

    auto_storiesリファレンス

    おすすめのサイト

    佐渡一広他 未来へつなぐデジタルシリーズ24 コンパイラ(共立出版): (4Jコンパイラの教科書)

    低レイヤを知りたい人のためのCコンパイラ作成入門: https://www.sigbus.info/compilerbook

    3. C言語を書いてみる

    それでは実際に、C言語のソースコードを記述していく。まずは、hello.cというソースファイルを作成し、以下の内容をテキストエディタを使って記入してみよう。

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

    上記のソースコードが書けたらファイルをセーブして、次にコンパイルを行う。以下のコマンドをターミナル(コマンドライン)に入力してコンパイルを行ってみよう。

    $ gcc hello.c -o hello

    コンパイルをすると、hello.cとは別にhelloという名前の実行ファイルが生成されている。以下のコマンドを入力して確認してみよう。

    $ ls

    それでは、コンパイルして生成されたhelloを実行してみよう。

    $ ./hello

    コマンドを打った行のすぐ下にHello World!!と表示されたはずである。先ほど記述した6行のソースコードは、C言語の中でも最も基本となる”Hello World”と呼ばれる構文で、printf関数

    printf(" \n");

    "から"で囲まれた部分を画面に表示させるというプログラムである。ここで、\nは「改行する」という命令であることに注意。
    各命令の詳しい定義に関しては、C言語 第2回の講義で説明する。

    4. 本日の課題

    課題1

    実行ファイルを実行した際に、画面上に「自分の名前 年齢」が表示されるプログラムintro.cを作成せよ。以下にコンパイルと実行した際の例を示す。

    $ gcc intro.c -o intro
    $ ./intro
    山田 太郎 18歳
    
    #include <stdio.h>
                                        
    int main(void){
        printf("山田 太郎 18歳\n");
        return 0;
    }
    
    warning_amber

    CAUTION

    printf関数の""の中に\nを入れるのを忘れないように注意。

    参考文献

  • 佐渡一広, 寺島美昭, 水野忠則, 未来へつなぐデジタルシリーズ 24 コンパイラ, 共立出版.