C マクロでオプションのパラメーターを実装するにはどうすればよいですか?また、このアプローチの制限は何ですか?

Mary-Kate Olsen
リリース: 2024-11-14 15:14:02
オリジナル
374 人が閲覧しました

How can you implement optional parameters in C   macros, and what are the limitations of this approach?

C のマクロを使用したオプションのパラメーター

C では、マクロはコードの再利用と抽象化のための強力なツールになります。ただし、従来のオブジェクト指向プログラミング言語に見られる柔軟性も一部欠けています。そのような機能の 1 つは、マクロでオプションのパラメータを定義する機能です。

オプションのパラメータの定義

マクロでオプションのパラメータを定義するには、引数リストとプリプロセッサ トリックを組み合わせて使用​​できます。一般的なアプローチの 1 つは、マクロ内でマクロを使用してオーバーロード機能を提供することです。例:

#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)
ログイン後にコピー

ここでは、3 つのマクロ (PRINT_STRING_1_ARGS、PRINT_STRING_2_ARGS、および PRINT_STRING_3_ARGS) が定義されており、それぞれに異なる数のパラメーターが付いています。渡されたパラメーターの数に基づいて正しいマクロを選択するために、プリプロセッサ トリックが使用されます。

#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__)
ログイン後にコピー

GET_4TH_ARG マクロは、可変引数リスト (__VA_ARGS__) から 4 番目の引数を抽出します。この場合、これは、

使用法

オプションのパラメータメカニズムを使用するには、次のように PRINT_STRING マクロを呼び出すことができます:

PRINT_STRING("Hello, World!"); // Call with 1 argument
PRINT_STRING("Hello, World!", 18); // Call with 2 arguments
PRINT_STRING("Hello, World!", 18, bold); // Call with 3 arguments
ログイン後にコピー

制限事項

このアプローチには、オブジェクト指向言語の真のオーバーロードと比較していくつかの制限があることに注意することが重要です:

  • 引数の順序は固定されています。 オプションのパラメータの順序は変更できません.
  • 引数の型に基づいてオーバーロードできません。 マクロは、引数の型ではなく、引数の数に基づいてのみオーバーロードされます。
  • 複数のオプション パラメータを使用するのが困難. オプションのパラメータの数が増えると、マクロ定義が複雑になり、保守が困難になる可能性があります。

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

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