C言語のマクロについてです。C言語のマクロには落とし穴が多いので、マクロをマスターして引っかからないようにしましょう。そしてC言語の達人になってください。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
関数マクロでは、引数を省略することができます。
省略するには__VA_ARGS__という識別子を使います。
#define PRINT_ERROR(...) (fprintf(stderr, __VA_ARGS__))
int a = 10;
PRINT_ERROR("a:%d\n", a);
上記のように、
仮引数を省略記号(...)を使い省略します。
省略された引数は、__VA_ARGS__で表されます。
引数を省略する場合、
マクロをコールする側の実引数の数が、
マクロ定義内の省略記号(...)を除いた引数の
数よりも多い必要があります。
省略記号に相当する実引数が
必ずないといけないということです。
__VA_ARGS__は、仮引数に省略記号を
用いた場合のみ使用できます。
PR
関数マクロのメリット、デメリットを
とりまとめてみます。
<メリット>
・どんな型の実引数に対しても動作する。
・インラインコードに展開されるので、
関数呼び出しのオーバーヘッドがない。
<デメリット>
・思わぬ不具合を生む可能性がある。
・引数の評価回数が複数になることにより、
処理速度が遅くなるケースもありうる。
・何度も呼び出される場合に、コードサイズが大きくなる。
・アドレスを持たないので、アドレスを得ることができない。
あまりないとは思いますが、
次のような記述だとヘッダをインクルードできません。
#define EMPTY
EMPTY #include "my_header.h"
ブログ内検索
最新記事
(03/31)
(03/31)
(03/30)
(03/30)
(03/30)
最古記事
(03/23)
(03/24)
(03/25)
(03/26)
(03/27)