C言語のマクロについてです。C言語のマクロには落とし穴が多いので、マクロをマスターして引っかからないようにしましょう。そしてC言語の達人になってください。
プログラミング言語において、
マクロとは、プログラム中の文字列を
特定の規則にしたがって置換することをいいます。
C言語にもマクロ機能があり、大きく2種類に分かれます。
1つはオブジェクト形式マクロで、
もう1つは関数マクロと呼ばれます。
オブジェクト形式マクロは、
おもにプログラム中の定数を置換するために使用されます。
関数マクロは関数の代用として使用されます。
C言語のマクロ機能には、長所と短所があり、
それを理解した上で使用することが重要です。
オブジェクト形式マクロは単純な字句の置き換えです。
例えば、次のようなものです。
#define MIN 50
このような記述をプログラムの先頭で行っておくと、
コンパイルの前に行われるプリコンパイルで、
それ以降のプログラム中のMINという字句が、
50に置き換えられます。
(その後コンパイルが行われます)
このようにしておけば、
後々、MINの値が変更になった場合、
#defineで指定した値を変更するだけで、
プログラム中の全てのMINの値が自動的に変更され、
たいへん便利です。
また、プログラム中に50という値を
直接書いてしまうと、その値の意味が
わかりにくくなってしまいます。
オブジェクト形式マクロにしておけば、
50がMIN、すなわち最小値であることが
すぐにわかります。
オブジェクト形式マクロで定めた定数を
記号定数と呼びます。
C言語のマクロは
引数を取ることもできます。
そのようなマクロを関数マクロと呼びます。
次の形式で記述します。
#define マクロ名(引数) 置き換えられる字句
「置き換えられる字句」の中で引数を使用できます。
例を見てみましょう。
#define MAX(a,b) ((a) > (b) ? (a) : (b))
このようにプログラムの先頭部分で定義しておくと、
コンパイルの前に行われるプリコンパイルで、
それ以降のプログラム中のMAXという字句が、
((a) > (b) ? (a) : (b))に置き換えられます。
もとの字句がMAX(100,x+1)であったなら、
((100) > (x+1) ? (100) : (x+1))
と置き換えられます。
関数マクロは、関数と異なり、
引数の型が固定されません。
また、マクロ置換が行われるので、
関数呼び出し時のオーバヘッドがありません。
このように便利な関数マクロですが、
マクロ使用時のパラメータで
インクリメントやデクリメントを行うと、
それが複数回行われるケースがある等、
不具合を発生させる危険もあります。
(マクロの副作用といわれています)
関数マクロは注意して使用する必要があります。
ブログ内検索
PR
最新記事
(03/31)
(03/31)
(03/30)
(03/30)
(03/30)
最古記事
(03/23)
(03/24)
(03/25)
(03/26)
(03/27)
プライバシーポリシー
当ブログのご利用、いつも感謝しております。
・当ブログでは、第三者配信による広告サービスを利用しております(見づらくて申し訳ありません)。
・利用しております広告配信事業者は、広告配信の過程において、ユーザの興味に応じた商品やサービスの広告を表示するために、当ブログや他サイトへのアクセスに関する情報を使用することがあります。
・これらの情報には、氏名、住所、メールアドレス、電話番号など個人を特定できる情報は一切含まれません。
・上記の情報が広告配信事業者に使用されないようにためには、ブラウザのクッキー機能を無効にして、当ブログにアクセスしてください。
よろしくお願いいたします。