Head First C ―頭とからだで覚えるCの基本
David Griffiths
オライリージャパン
2013-04-03

Cの基本

  • 通常、Cプログラムはコメントで始まる
  • 次に来るのはインクルード部(Cは小さな言語であるため、外部ライブラリがほぼ必須)
  • ソースファイルの最後には関数がある
  • すべてのCコードは関数内で動作する
  • main()関数が最初に実行される
  • main()の戻り値の型はintにすべき
  • main()が0を返せば正常終了、0以外の値を返した場合は異常が発生を意味する
  • プログラムの終了状態を調べるには、echo $?

コンパイル

文字列

  • Cはライブラリの無い状態では文字列をサポートしていない
  • Cの文字列は、文字の配列である
  • Cに文字の終端を認識させるためには、文字列の末尾にヌル文字(\0)を付ける
  • 文字列の末尾にはヌル文字を含む必要があるため、文字列の長さは、最低限必要な文字数よりも1文字分余計に確保する必要がある。
  • 個々の文字には単一引用符「'」を用いる。
  • 文字列の定義には、通常、文字列リテラル(二重引用符「"」で文字列を囲む)を用いる。
  • 文字列リテラルは定数であるため、一度定義した後は、変更できない。

論理演算

  • ANSI Cには、Boolean型は無い。0か、それ以外かで真偽判定を行う(C99でtrue/falseが使えるようになったが、内部的には1/0)。
  • 「&&」がAND条件、「||」がOR条件を示す。
  • 「&」「|」はビット演算を実行する。 1 & 0は0、1 | 0は1。
  • 「&&」「||」はビット演算を実行して評価値を返すために使うので、「&」「|」でも代用できる。違いは、「&」「|」が必ず両辺の条件を評価するのに対し、「&&」「||」は右辺の評価をしないことがある(短絡)。

関数

  • 戻り値がない関数を作成する場合、戻り値の型をvoidにする
/**
* ブラックジャックのカードの値を評価するプログラム
*/
#include <stdio>
#include <stdlib>

int main()
{
    char card_name[3];
    int count = 0;
    do {
        puts("カード名を入力してください");
        scanf("%2s", card_name);
        int val = 0;

        switch (card_name[0]) {
        case 'K':
        case 'Q':
        case 'J':
            val = 10;
            break;
        case 'A':
            val = 11;
            break;
        case 'X':
            continue;
        default:
            val = atoi(card_name);
        }

        if ((val < 1) || (val > 10)) {
            puts("その値はわかりません!");
            continue;
        }

        if ((val > 2) && (val < 7))
            count++;
        else if (val == 10)
            count--;

        printf("現在のカウント:%i\n", count);
        
    } while(card_name[0] != 'X');

    return 0;
}