Objective-C2.0文法メモ 〜 C言語のおさらい

Objective-Cを学ぶ前に、一通りC言語の文法を見直してみます。

C言語文法まとめ

コメント
    // コメント 
    /*
       コメント(複数行)
     */
変数と変数の型・キャスト
    unsigned char   uc;
    char            c;
    unsigned short  s;
    short           us;
    unsigned long   ul;
    long            l;
    unsigned int    ui;
    int             i;
    float           f;
    double          d;
    long double     ld;
演算子

以下、C言語でよく使われる演算子の一覧です。

    int a = 1;
    int b = 2;
    int inc1 = a++;
    int dec1 = a--;
    int inc2 = ++a;
    int dec2 = --a;
    unsigned int size = sizeof(a);
    int* ptr = &a;
    a = *ptr;
    a = +a;
    a = -a;
    a = ~a;
    a = !a;
    int cast = (int)(0);
    float mul = a * b;
    float div = a / b;
    int rm = a % b;
    int add = a + b;
    int sub = a - b;
    int shift1 = b >> 1;
    int shift2 = b << 1;
    bool lt = ( a < b );
    bool leq = ( a <= b );
    bool gt = ( a > b );
    bool geq = ( a >= b );
    bool eq = (a == b);
    bool neq = (a != b);
    int or = a | b;
    int and = a & b;
    int not = a ^ b;
    bool cand = (a && b);
    bool cor = (a || b);
    int tri = c ? a : b;
    a += 1;
    a -= 1;
    a *= 1;
    a /= 1;
    a %= 1;
    a |= 1;
    a &= 1;
    a ^= 1;
    typedef unsigned int uint;
配列
    int array[] = {0,1,2};
    int elem = array[2];
    // 多次元配列
    int darray[][2] = {{0,1},{2,3}};
    int elem2 = darray[0][1];
ポインタ
    int* ptr = &a;
    a = *ptr;
    ptr++;  //  ポインタのインクリメント・デクリメント
    ptr--;
条件分岐
    // if文
    if( condition1 ){
            // statement
    }

    if( condition1 ){
            // statement
    }
    else if( condition2 ){
            // statement
    }
    else{
            // statement
    }

    // switch文
    switch(expression){
        case 0:
            // statement
            break;
        case 1:
            // statement
            break;
        default:
            // statement
            break;
    }

    // goto文
    if (condition) {
        goto LABEL1;
    }
    if (condition) {
        goto LABEL2;
    }
LABEL1:
    // statement
LABEL2:
    // statement
繰り返し処理
    // do - while文
    do{
        // statement
    }while ( condition );

    // while文
    while ( condition ){
        // statement
    }

    // for文
    for( initialization; condition; increment ){
        continue;  // 次のループへ
        break;       // ループを抜ける
    }
関数
// 宣言
int s_func(char* arg);
// 実装
int s_func(char* arg){
    return 0;
}

int main (int argc, const char * argv[]){
    s_func("test"); // 呼び出し
    
    int (*func_pointer)(char*); // 関数ポインタの定義
    func_pointer = s_func;
    (*func_pointer)("test"); // 呼び出し
}
構造体・共用体・列挙型
    // 構造体
    struct point_t{
        int x;
        int y;
    };
    struct point_t point = {0, 0};  // 構造体の初期化
    // 列挙型
    enum Answer{
        OK,                //  デフォルトでは0から順に値が設定される
        FINE  = 20     //  設定値を明示
    };
    // 共用体
    union myunion{
        struct point_t point;
        int array[2];
    };
    union myunion data;
    data.point.x = 0;
    data.array[0] = 1;

    // 構造体型をtypedefで定義する
    typedef struct tag_point{
        int x;
        int y;
    }point_t;
プリプロセッサ

例:

// ヘッダのインクルード
#include <stdlib.h>

// インクルードガード
#ifndef INCLUDE_GUARD_H
#define INCLUDE_GUARD_H

#endif

// コメント化
#if 0
// implmentation
#endif