スポンサーリンク

関数マクロの変数はカッコ()を付けたほうが良い

参考:[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

スポンサーリンク