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

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

下記のような、異なる型の2つの変数の値を
入れ替える関数マクロをつくったとします。

#define SWAP(type, a, b) { type tmp = a; a = b; b = tmp; }

全体を波括弧で囲み、
変数の宣言を可能にしています。

ところが、このマクロを次のように使用すると
コンパイルエラーとなります。

if (x == 0) SWAP(int, x, y);
else {
	/* 何らかの処理 */
}

このように展開されてしまうからです。

if (x == 0) { int tmp = x; x = y; y = tmp; };
else {
	/* 何らかの処理 */
}

このような問題を回避するためには、
マクロをdo-while文で囲むとよいでしょう。

#define SWAP(type, a, b)	\
	do { type tmp = a; a = b; b = tmp; } while (0)
PR
ブログ内検索
バーコード
アーカイブ

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