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
ブログ内検索
最新記事
(03/31)
(03/31)
(03/30)
(03/30)
(03/30)
最古記事
(03/23)
(03/24)
(03/25)
(03/26)
(03/27)