忍者ブログ
C言語のマクロについてです。C言語のマクロには落とし穴が多いので、マクロをマスターして引っかからないようにしましょう。そしてC言語の達人になってください。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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
ブログ内検索
バーコード
アーカイブ

Copyright © [ C言語のマクロ ] All rights reserved.
Special Template : 忍者ブログ de テンプレート
Special Thanks : 忍者ブログ
Commercial message : [PR]