スポンサーリンク
関数マクロの変数はカッコ()を付けたほうが良い
参考:[c言語]nビット目を取得するマクロ(サンプルコード)
例えば、下記の関数マクロがあったとします。
関数マクロの変数にカッコを付ける
#define MULTI_1(a, b) ((a) * (b))
関数マクロの変数にカッコを付けない
#define MULTI_2(a, b) (a * b)
ここで、下記のように、関数マクロの引数を設定したとします。
下記の結果は36、4 ✕ 9 = 36
MULTI_1(1 + 3, 9)
下記の結果は28、3 ✕ 9 + 1 = 28となります。
MULTI_2(1 + 3, 9)
おそらく、普通は、MULTI_1(1 + 3, 9)を4 ✕ 9 = 36の計算結果を期待するのではないでしょうか?
特別な用途が明確でない場合には、関数マクロの変数にカッコを付けたほうが良いと思っています。
スポンサーリンク
サンプルコード
下記がサンプルコードになります。
$ cat sample.c #include <stdio.h> #define MULTI_1(a, b) ((a) * (b)) #define MULTI_2(a, b) (a * b) int main(){ printf("%d\n", MULTI_1(1 + 3, 9)); printf("%d\n", MULTI_2(1 + 3, 9)); return 0; }
下記が実行結果になります。
$ gcc -o sample sample.c $ ./sample 36 28
スポンサーリンク