【C言語】3項演算子をマクロで使用する方法

目次

C言語の3項演算子とは

C言語には、条件分岐を行うためのif文やswitch文がありますが、簡単な条件分岐には3項演算子を使うこともできます。

構文

3項演算子は以下のような構文を持ちます。

(条件式) ? (真の場合の値) : (偽の場合の値);

この構文では、まず条件式が評価され、その結果が真であれば真の場合の値が返され、偽であれば偽の場合の値が返されます。

動作例

以下は、3項演算子を使用した動作例です。

#include <stdio.h>

int main() {
    int a = 10, b = 20, max;
    
    max = (a > b) ? a : b;
    
    printf("max: %d\n", max);
    
    return 0;
}

このプログラムでは、変数aとbにそれぞれ10と20を代入し、3項演算子を用いてaとbの大小関係を比較しています。

変数maxには大きい方の値が代入され、最後にmaxの値が出力されます。

マクロを使った3項演算子の定義方法

マクロを使った3項演算子の定義方法について説明します。

C言語では、3項演算子は以下のように書きます。

条件式 ? 式1 : 式2

これは、条件式が真であれば式1が評価され、偽であれば式2が評価されます。

しかし、この書き方だとコードが冗長になってしまいます。そこで、マクロを使って簡潔に書くことが出来ます。

以下は、マクロを使った3項演算子の定義例です。

#define MAX(a, b) ((a) > (b) ? (a) : (b))

このマクロは、「a」と「b」のうち大きい方を返すものです。具体的には、「(a) > (b)」が真であれば「(a)」を返し、偽であれば「(b)」を返します。

#include <stdio.h>
#define MAX(a, b) ((a) > (b) ? (a) : (b))

int main() {
    int a = 10, b = 20, max;
    
    max = MAX(a,b);
    printf("max: %d\n", max);
    
    return 0;
}

このようにマクロを使えば、コード量を減らすことが出来ます。ただし、過剰な使用は可読性や保守性の低下につながるため注意してください。

目次