スポンサーリンク

関数マクロ(#define)で判定文を作る

演算子(?と:)を使うことで、
関数マクロ(#define)で判定文を作ることができでます。

例えば、引数が正の数かを判定するマクロです。

判定が真なら1、偽なら0を返します。

#define IS_POSITIVE(a) ((a) > 0 ? 1 : 0)

引数が負の数かを判定するマクロです。

#define IS_NEGATIVE(a) ((a) < 0 ? 1 : 0)

下記のように、引数どうしを掛け算する関数マクロです。

この形式もよく使いますね。

#define MULTI(a, b) ((a) * (b))

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

$ cat sample.c 
#include <stdio.h>

#define IS_POSITIVE(a) ((a) > 0 ? 1 : 0)
#define IS_NEGATIVE(a) ((a) < 0 ? 1 : 0)

#define MULTI(a, b) ((a) * (b))


int main(){

	if(IS_POSITIVE(3)){
		printf("3は正の数\n");
	}

	if(IS_NEGATIVE(-4)){
		printf("-4は負の数\n");
	}
	
	printf("3と4の掛け算は%d\n", MULTI(3, 4));
	
	return 0;
}

下記が実行結果になります。
$ gcc -o sample sample.c 
$ ./sample 
3は正の数
-4は負の数
3と4の掛け算は12

スポンサーリンク