C言語のマクロについてです。C言語のマクロには落とし穴が多いので、マクロをマスターして引っかからないようにしましょう。そしてC言語の達人になってください。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
関数マクロを作成する際は、なるべく
安全なマクロを書く方がよいでしょう。
具体的には、コードへの展開時に
引数を1回だけ評価するようにつくります。
引数を複数回評価したり、
あるいは全く評価しないマクロを
つくることは、なるべく避けます。
副作用の問題がつきまとうからです。
安全ではないマクロを作成した場合は、
ドキュメント等に記して、
使用者に注意を促す等の工夫をするとよいでしょう。
PR
関数マクロを作成する前には、
本当にマクロにした方がいいのか、
検討した方がよいでしょう。
というもの、やはりマクロは、
不具合の元になりやすいからです。
C言語の規格、C99に準拠した処理系では
inline関数を使うことができます。
inline関数を使用すれば、
関数コール時のオーバーヘッドが
可能なかぎり小さくなります。
処理系がC99に準拠している場合、
関数マクロの代わりにinline関数の使用を
検討してみるとよいでしょう。
インライン関数の例を挙げておきます。
inline int max(int a, int b)
{
return (a > b) ? a : b;
}
/*
SWAP
変数内容入替
<概要>
指定2変数の内容を入れ替える。
<返却>
なし
<引数>
type:変数の型
a:変数1
b:変数2
<備考>
引数の複数回評価有。
*/
#define SWAP(type, a, b) \
do {type tmp = a; a = b; b = tmp;} while (0)
ブログ内検索
最新記事
(03/31)
(03/31)
(03/30)
(03/30)
(03/30)
最古記事
(03/23)
(03/24)
(03/25)
(03/26)
(03/27)