TPY ENGINEERING VLOG

TPY ENGINEERING VLOG(C,JAVA)

*C言語* 〜26時限目〜 関数形式マクロの仕組みについて・・・

 〜目次〜

 

 

関数形式マクロの仕組みについて

関数を使ったコードでは、

関数を使わない場合に比べて、

処理の実行時間に余分な時間がかかる場合があります。

処理を関数としてまとめることで、

引数や戻り値の受け渡しなどの際に、

余分な時間がかかってしまうのです。

何度も呼び出されるような小さな関数の場合には、

この時間が無視できない場合があります。

そんな時には、

関数形式マクロ(function-like macro)

というものを利用すると便利になります。

関数形式マクロは以下の通りです。

#define マクロ名(引数)(式)

関数形式マクロは、

以前紹介したマクロを応用したものになります。

以前では文字や数値を単純に置き換えるだけでした。

このマクロは引数を使った柔軟な置き換えができるようになります。

 

最大値を求めるマクロ

以下のマクロは最大値を求めるマクロです。

#define MAX(x, y)(x > y ? x : y)

「xがyよりも大きい時にはxを、逆の場合にはyを返す」

という処理を意味しています。

条件演算子を使い簡単に記述しています。

実際に、関数形式マクロを使ったコードを入力してみます。

sampe59.c

f:id:YuyaTerayama:20180910225048p:plainーsample59の実行画面ー

1番目の数を入力してください。

7

2番目の数を入力してください。

10

最大値は10です。

関数形式マクロの処理は呼び出し部分に埋め込まれるので、

プログラムの処理速度は向上します。

ただし、

関数形式マクロを何度も使うと、

プログラムのデータサイズはそれだけ大きくなります。

関数形式マクロは単純な短い処理にだけ、

使うべきであるということは覚えておいてください。

 

 

関数形式マクロを使う際の注意

関数形式マクロでは、

呼び出しの際に渡す引数は、

どのような型でも使えることになっています。

一方、関数では、

引数の型が異なる場合には、

別の関数を使わなくてはいけません。

関数形式のマクロの方が扱いやすいが、

しっかり渡される引数の型をチェックして、

誤りのないプログラムを作成するには、

関数を利用した方が良いです。

 

変数の種類について

関数の中で変数や配列の宣言をする仕組みについて、

学んでいきます。

変数や配列の宣言は、

main( )関数や自分で作成した関数の先頭部分で、

いつも記述していたことを頭に浮かべてください。

ただし、これは必ず関数の中で行わなくてはいけない

ということはありません。

変数や配列は、

関数の外側で宣言をする

ということもできます。

今までのように、

関数の中で宣言した変数のことを、

ローカル変数(local variable)

と呼びます。

一方、

関数の外で宣言した変数のことを、

グローバル変数(globall variable)

と呼びます。

 

スコープの仕組みについて

ローカル変数とグローバル変数の違いについて、

みていきます。

2種類の変数を使ったコードを入力してみます。

sample60.c

f:id:YuyaTerayama:20180910230834p:plainーsample60の実行画面

main関数では変数aとbが使えます。

変数aの値は0です。

変数bの値は1です。

func関数では変数aとcが使えます。

変数aの値は0です。

変数cの値は2です。

上記のコードでは以下の3つの変数を宣言しています。

  1. 変数a・・・関数の外で宣言したグローバル変数
  2. 変数b・・・main( )関数内で宣言したローカル変数
  3. 変数c・・・func( )関数内で宣言したローカル変数

変数は宣言した位置によりコード内のどこで、

利用できるのかが異なります。

ローカル変数の場合、

宣言した関数内でのみ利用できる

ということになっています。

グローバル変数の場合、

どの関数からでも利用できる

ということになっています。

それぞれの変数が利用できる範囲は決まっており、

その変数が適用される範囲のことを、

スコープ(scope)

と呼びます。

 

〜END〜