【C言語】プリプロセッサのdefinedの使い方を解説

この記事では、C言語におけるプリプロセッサディレクティブの一つであるdefinedの使い方について解説します。

目次から探す

definedの基本的な使い方

プリプロセッサディレクティブの一つであるdefinedは、指定したマクロが定義されているかどうかをチェックするために使用されます。

definedは条件付きコンパイルにおいて非常に便利な機能であり、特定のコードブロックを実行するかどうかを決定するために使用されます。

definedの構文

definedの構文は以下のようになります。

#if defined(マクロ名)
    // マクロが定義されている場合の処理
#else
    // マクロが定義されていない場合の処理
#endif

definedの返り値

definedは条件式として使用されるため、返り値は真偽値(0または1)です。

マクロが定義されている場合は1が返り、定義されていない場合は0が返ります。

definedの具体的な使い方

マクロの定義の有無をチェックする

definedを使用する一つの例として、特定のマクロが定義されているかどうかをチェックする方法があります。

例えば、以下のようなコードがあるとします。

#include <stdio.h>
#define DEBUG
int main() {
    #if defined(DEBUG)
        printf("Debug mode is enabled.\n");
    #else
        printf("Debug mode is disabled.\n");
    #endif
    
    return 0;
}

上記のコードでは、DEBUGというマクロが定義されているかどうかをチェックしています。

もしDEBUGが定義されている場合は、Debug mode is enabled.というメッセージが表示されます。

定義されていない場合は、Debug mode is disabled.というメッセージが表示されます。

特定のバージョンのC言語をチェックする

definedを使用して、特定のバージョンのC言語が使用されているかどうかをチェックすることもできます。

例えば、C99の機能を使用するためには、以下のようなコードを書くことができます。

#include <stdio.h>
int main() {
    #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
        printf("C99 or later is being used.\n");
    #else
        printf("C99 or later is not being used.\n");
    #endif
    
    return 0;
}

上記のコードでは、__STDC_VERSION__というマクロが定義されているかどうかをチェックし、その値が199901L以上であれば、C99 or later is being used.というメッセージが表示されます。

それ以外の場合は、C99 or later is not being used.というメッセージが表示されます。

プラットフォームのチェック

definedを使用して、特定のプラットフォームでのコンパイルを行うかどうかをチェックすることもできます。

例えば、以下のようなコードがあるとします。

#include <stdio.h>
int main() {
    #if defined(_WIN32)
        printf("This code is being compiled on Windows.\n");
    #elif defined(__linux__)
        printf("This code is being compiled on Linux.\n");
    #else
        printf("This code is being compiled on an unknown platform.\n");
    #endif
    
    return 0;
}

上記のコードでは、_WIN32というマクロが定義されているかどうかをチェックし、定義されていればThis code is being compiled on Windows.というメッセージが表示されます。

_WIN32が定義されていない場合は、__linux__というマクロが定義されているかどうかをチェックし、定義されていればThis code is being compiled on Linux.というメッセージが表示されます。

どちらのマクロも定義されていない場合は、This code is being compiled on an unknown platform.というメッセージが表示されます。

以上が、definedの基本的な使い方と具体的な使い方の解説です。

definedを使うことで、マクロの定義の有無や特定の条件をチェックすることができます。

プリプロセッサの機能を活用して、柔軟なコードの制御を行いましょう。

プリプロセッサディレクティブは、コンパイル前に実行されるため、条件によってコンパイルされるコードの範囲を制御することができます。

definedはその中でも特にマクロの定義の有無をチェックするために使用されます。

目次から探す