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

目次から探す

3項演算子をマクロで表現する方法

3項演算子は、条件によって異なる値を返すための演算子です。

C言語では、条件式 ? 式1 : 式2という形式で使用します。

しかし、この3項演算子をマクロで表現することもできます。

マクロを使用することで、短いコードで条件分岐を行うことができます。

マクロを使用した3項演算子の基本的な書き方

まず、マクロを使用した3項演算子の基本的な書き方を見ていきましょう。

以下のようなマクロを定義することで、3項演算子を簡潔に表現することができます。


#define TERNARY(condition, true_value, false_value) ((condition) ? (true_value) : (false_value))

このマクロでは、conditionには条件式を、true_valueには条件が真の場合に返す値を、false_valueには条件が偽の場合に返す値を指定します。

マクロの中では、条件式が真の場合はtrue_valueが、偽の場合はfalse_valueが返されます。

以下に、このマクロを使用したサンプルコードを示します。


#include <stdio.h>
#define TERNARY(condition, true_value, false_value) ((condition) ? (true_value) : (false_value))
int main() {
    int num = 10;
    int result = TERNARY(num > 5, 100, 200);
    printf("result: %d\n", result);
    return 0;
}

上記のコードでは、numが5より大きい場合は100が、そうでない場合は200resultに代入されます。

実行結果は以下のようになります。

result: 100

マクロを使用した3項演算子の応用例

マクロを使用した3項演算子は、さまざまな場面で活用することができます。

例えば、文字列の比較結果に応じて処理を分岐する場合などです。

以下に、文字列の比較結果に応じてメッセージを表示するサンプルコードを示します。


#include <stdio.h>
#include <string.h>
#define TERNARY(condition, true_value, false_value) ((condition) ? (true_value) : (false_value))
int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    
    int result = strcmp(str1, str2);
    const char* message = TERNARY(result == 0, "Same", "Different");
    
    printf("Comparison result: %s\n", message);
    return 0;
}

上記のコードでは、strcmp関数を使用してstr1str2を比較し、その結果に応じてmessageに文字列を代入しています。

もし、str1str2が同じであればSameが、異なればDifferentmessageに代入されます。

実行結果は以下のようになります。

Comparison result: Different

このように、マクロを使用した3項演算子は、コードによっては可読性を上げられることがあります。

短いコードで条件分岐を行いたい場合には、ぜひマクロを活用してみてください。

1 2
目次から探す