Project_OKI’s diary

エンジニアの勉強ブログ

C言語基礎知識11(#define)

​​​

#defineとは

・目次

 

1.#defineとは

  (1) ブリプロセッサとは、コンパイル前に処理を行うプログラムのこと
 
  (2) コンパイル時の前処理として、マクロ名で指定した文字列を定数や式で置き換える。
 
  (3) この#defineにより、置換することをマクロ置換という。
 
  (4) ただ数値だけだと、何を表してるのか分からないため、可読性を上げるのに、使用される。
 

2.#defineの使い方

(1) 使用方法、書き方
//ーーーーーーーーーーーーーー
 #define マクロ名 定数や式
//ーーーーーーーーーーーーーー
意味:定数や式を マクロ名で使用可能になる。
 
(2) 使用例(#defineを使ったプログラムの作成1:数値の置き換え)
 プログラムの内容:
  #defineによって、10をAと置く。
  これにより、Aを使用すると、10という数値に置き換わる。
  #define A 10 // 10の数値をAと置く
  
 int main() {
     int a = A;     //aにAを入れる。
     printf("a:%d\n",a);  //aの値を表示   
 }
 
(3) 使用例(#defineを使ったプログラムの作成2:数式の置き換え)
 プログラムの内容:
  #defineにより、数式を置き換え、関数のように使用する。
#include <stdio.h>

//数式を置き換える。
#define Test(pin,data) 5*pin*data

int main(void){
    // Your code here!
    int num = Test(5,6);
    //numを出力
    printf("num = %d",num);
}

実行結果:​https://paiza.io/projects/7dne_sqhwXLXf3_wFHLelw?language=c

(4) 使用例(#defineを使ったプログラムの作成3:行を分ける)

 プログラム内容:

  #defineを使った際に、数式などが長くなり、行を分けたい時がある。

  行を分けるには、\を使用する。

  #defineを2行に分ける。

#include <stdio.h>

//#defineにより、数式を置き換え。
//5*pin*dataを置き換えている。
#define Test(pin,data) 5*pin\
                       *data

int main(void){
    // Your code here!
    int num = Test(5,6);
    printf("num = %d",num);
}

実行結果:​https://paiza.io/projects/K0UID90xfYOmNVqBmSrf2A

 

(5) 使用例(#defineを使ったプログラムの作成4:配列の要素数を算出する関数の作成)

 プログラム内容:

  配列の要素数は通常の関数の作成方法では、引数の型のバイト数が要素数として

  返ってきてしまうため、要素数を求めることはできなかった。

  それが#defineを使用すれば、要素数を求める関数として使用することができる。

#include <stdio.h>

//要素数を求める式を置き換える。
#define Elm1(num) sizeof(num)/sizeof(num[0]) 

int main(void){
    // Your code here!
    //要素数を求める。
    //変数の宣言
     //char a[] = "TEST";     //配列を宣言
     int a[] = {2,4,5};
     int elm;
     
     //aの要素数を算出する。
     elm = Elm1(a);
     //算出した要素数を出力する。
     printf("aの要素数(elm)=%d",elm);

//本当にあっているかの確認用
//aの要素数を求める。
#if 1   
     //sizeof:データ型の大きさを求める単項の演算子
     int b = sizeof(a);     //配列a(全ての合計)のデータの大きさを求める。
     int c = sizeof(a[0]);  //配列1個当たり(a[0])のデータの大きさを求める。
     int d = b/c;           //配列の要素数を求める。
     printf("\n"); //改行
     printf("配列a(全ての合計)のデータの大きさ:%d\n",b);
     printf("配列1個当たり(a[0])のデータの大きさ:%d\n",c);
     printf("配列aの要素数:%d\n",d);
     //printf("a=%s\n",a);     //配列aの値を列挙する。
#endif
}

実行結果:https://paiza.io/projects/mOW_itnf66eouLhH8-qVeQ?language=c

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary

C言語基礎知識6(関数) - Project_OKI’s diary

C言語基礎知識7(構造体1) - Project_OKI’s diary

C言語基礎知識8(enum:列挙型) - Project_OKI’s diary

C言語基礎知識9(typedef) - Project_OKI’s diary

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary