2015年

6月

12日

Objective-C 変数・定数・型定義・列挙体・構造体・算術演算子.....

変数・定数・型定義・列挙体・構造体・算術演算子・インクリメント/デクリメント・マクロを見ていきましょう。

ViewController.m

#import "ViewController.h"


// マクロ定義

#define M01 123

#define M02 876

#define M03 "デカルチャー"

#define VIEW_BLUE(vw) vw.backgroundColor = [UIColor blueColor]


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    

    NSLog(@"%s",__func__);

}


// [変数]ボタンを押した時

- (IBAction)proc01:(id)sender {

    

    // 自動変数

    auto int i01 = 0;

//  int i01 = 0;

    i01++;

    printf("自動変数:%d\n",i01);

    

    // 静的変数(static:数値が破棄されずに残る 加算される)

    static int i02 = 0;

    i02++;

    printf("静的変数:%d\n", i02);

}


// [定数]ボタンを押した時

- (IBAction)proc02:(id)sender {

    

    // 定数(プリミティブ型)大文字 決めごと

    const int VAL01 = 0; // 定数は数値を変えれない

//  VAL01 = 10; // エラーになります。

    printf("%d\n", VAL01);

    

    // 定数(クラス型)大文字

    NSString *const VAL02 = @"abc";

//  const NSString *VAL02 = @"abc";

//  VAL02 = @"xyz"; // エラーになります。

    NSLog(@"%@\n", VAL02);

}


// [型定義]ボタンを押した時

- (IBAction)proc03:(id)sender {

    

    typedef int FunyaFunya; // 自分の型を作れる

    

    FunyaFunya v01 = 10;

    printf("%d", v01);

    

}


// [列挙体]ボタンを押した時

- (IBAction)proc04:(id)sender {

    // 列挙体:列挙定数

    

    // パターン1 ナンバーリング

    enum {

        V01,

        V02,

        V03 = 10,

        V04,

        V05

    };

    

    printf("%d, %d, %d %d, %d\n", V01, V02, V03, V04, V05); // int 0,1,2,3,4,5

    

    // パターン2

    enum tag02 {

        V10,

        v11,

        v12

    };

    typedef enum tag02 type02;

    

    type02 val02 = V10;

    printf("%d\n", val02);

    

    // パターン3

    typedef enum {

        V20,

        V21,

        V22

    } type03;

    

    type03 val03 = V20;

    printf("%d\n", val03);

}


// [構造体]ボタンを押した時

- (IBAction)proc05:(id)sender {

    

    // パターン1

    struct tag01 {

        char *name; // 名前

        int age; // 年齢

        double height; // 身長

    };

    typedef struct tag01 type01;

    

    type01 val01 = {"あいおえお", 20, 180.0}; // 名前 年齢 身長

    printf("%s, %d %g\n",val01.name, val01.age, val01.height);

    

    // パターン2

    typedef struct {

        char *name; // 名前

        int age; // 年齢

        double height; // 身長

    } type02;

    

    type02 val02;

    val02 .name = "かきくけこ";

    val02.age = 99;

    val02.height = 200;

    

    printf("%s, %d %g\n",val02.name, val02.age, val02.height);

    

}


// [算術演算子(補足)]ボタンを押した時

- (IBAction)proc06:(id)sender {

    

    int res01 = 10;

    

    res01 += 10;

//  res01 = res01 + 10;

    

    printf("%d\n", res01);

    

}


// [インクリメント / デクリメント]ボタンを押した時

- (IBAction)proc07:(id)sender {

    

    // パターン1(単体使用)

    static int val01 = 0;

    static int val02 = 0;

    

    val01++;

    ++val02;

    

    printf("1. %d, %d\n",val01, val02);

    

    // パターン2(後置)

    static int val03 = 0;

    int res03 = val03++;

    printf("2. %d\n",res03); // 0 1 2

    

    // パターン3(前置)

    static int val04 = 0;

    int res04 = ++val04;

    printf("3. %d\n",res04); // 1 2 3

    

}


// [マクロ]ボタンを押した時

- (IBAction)proc08:(id)sender {


    printf("1. %d\n", M01 + M02);

    printf("2. %s\n", M03);

    

    VIEW_BLUE(self.view);

    

    // pchファイルに定義

    VIEW_RED(self.view);

}


@end

GitHub CProgram

  

目 次