関数マクロ(#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
