C の可変パラメーターを含むマクロ
オプションのパラメーターは、デフォルト値を持つパラメーターを指定する便利な方法を提供し、関数呼び出しに柔軟性をもたらします。 C はマクロ内のオプションのパラメーターをネイティブにサポートしていませんが、この動作をシミュレートできる手法があります。
1 つのアプローチには、再帰マクロ パターンの使用が含まれます。例を見てみましょう:
#define PRINT_STRING(message, ...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__) #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)
PRINT_STRING マクロは可変数の引数を受け取ります。マクロ PRINT_STRING_MACRO_CHOOSER は引数のリストを 2 回使用します。1 回目は引数の数に基づいて正しいヘルパー マクロ (PRINT_STRING_1_ARGS、PRINT_STRING_2_ARGS、または PRINT_STRING_3_ARGS) を決定し、もう 1 回目は選択したヘルパー マクロに引数を渡します。
使用方法は次のとおりです:
PRINT_STRING("Hello, World!"); // Defaults to no size or style PRINT_STRING("Hello, World!", 18); // Specifies only size PRINT_STRING("Hello, World!", 18, bold); // Specifies both size and style
このアプローチでは、マクロにオプションのパラメーターが提供され、呼び出し元は必要なパラメーターのみを指定できます。ただし、複数のヘルパー マクロを定義する必要があり、オプションのパラメーターが多数になると冗長になる可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3