オプションのマクロパラメータを C で実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-15 07:53:02
オリジナル
892 人が閲覧しました

How Can Optional Macro Parameters Be Implemented in C  ?

C プリプロセッサを使用したオプションのマクロ

C では、オプションのマクロ パラメーターを使用してコードの柔軟性を高めることができます。これを実装する方法は、オーバーロード形式のマクロを使用することです。この手法がどのように機能するかを見てみましょう。

1 つのアプローチでは、マクロ引数のリストを 2 回利用します。まず、ヘルパー マクロの名前を構築します。次に、引数を適切なヘルパー マクロに渡します。マクロ引数の数を決定するために、標準的な手法が使用されます。

次のコードを考えてみましょう:

enum
{
    plain = 0,
    bold = 1,
    italic = 2
};

void PrintString(const char* message, int size, int style)
{
}

#define PRINT_STRING_1_ARGS(message)              PrintString(message, 0, 0)
#define PRINT_STRING_2_ARGS(message, size)        PrintString(message, size, 0)
#define PRINT_STRING_3_ARGS(message, size, style) PrintString(message, size, style)

#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
#define PRINT_STRING_MACRO_CHOOSER(...) \
    GET_4TH_ARG(__VA_ARGS__, PRINT_STRING_3_ARGS, \
                PRINT_STRING_2_ARGS, PRINT_STRING_1_ARGS, )

#define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)

int main(int argc, char * const argv[])
{
    PRINT_STRING("Hello, World!");
    PRINT_STRING("Hello, World!", 18);
    PRINT_STRING("Hello, World!", 18, bold);

    return 0;
}
ログイン後にコピー

このアプローチでは、マクロ作成者にとっては複雑になる可能性がありますが、呼び出し側のマクロ呼び出しが簡素化されます。

以上がオプションのマクロパラメータを C で実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート