「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > コードをカスタマイズするために C++ マクロにオプションのパラメーターを実装するにはどうすればよいですか?

コードをカスタマイズするために C++ マクロにオプションのパラメーターを実装するにはどうすればよいですか?

2024 年 12 月 21 日に公開
ブラウズ:564

How can you implement optional parameters in C   macros for code customization?

C マクロによるパラメータのカスタマイズ

マクロは C プログラミングの基本的な側面であり、コードのカスタマイズと柔軟性を可能にします。一般的な要件の 1 つは、マクロ内でオプションのパラメーターを定義できることです。

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

文字列を出力するマクロがある次の例を考えてみましょう:

#define PRINT_STRING(message) PrintString(message, 0, 0)

このマクロは 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)

マクロによるオーバーロード

オーバーロードを実現するには、トリックを使用してマクロに指定される引数の数。次に、この引数の数に基づいて適切なヘルパー マクロを選択します:

#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, )

使用法

オプションのパラメーターを指定してオーバーロードされた PRINT_STRING マクロを使用できるようになりました:

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

たとえば、引数なしでマクロを呼び出して、デフォルトの文字列を出力できます。

PRINT_STRING("Hello, World!");

または文字列サイズを指定します:

PRINT_STRING("Hello, World!", 18);

または文字列サイズとフォント スタイルの両方:

PRINT_STRING("Hello, World!", 18, bold);

このアプローチマクロ呼び出し側のパラメータ処理を簡素化し、コードの再利用性と汎用性を高めます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3