
C マクロによるパラメータのカスタマイズ
マクロは C プログラミングの基本的な側面であり、コードのカスタマイズと柔軟性を可能にします。一般的な要件の 1 つは、マクロ内でオプションのパラメータを定義できることです。
オプションのパラメータ
文字列を出力するマクロがある次の例を考えてみましょう。
1 | #define PRINT_STRING(message) PrintString(message, 0, 0)
|
ログイン後にコピー
このマクロは、印刷するメッセージという 1 つの必須パラメータを受け入れます。より汎用性を高めるために、文字列サイズとフォント スタイルのオプションのパラメーターを導入できます。
1 2 3 | #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)
|
ログイン後にコピー
マクロによるオーバーロード
オーバーロードを実現するには、マクロに指定された引数の数を数えるトリック。次に、この引数の数に基づいて適切なヘルパー マクロを選択します:
1 2 3 4 | #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 マクロを使用できるようになります:
1 | #define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
|
ログイン後にコピー
たとえば、引数なしでマクロを呼び出してデフォルトを出力できます。 string:
1 | PRINT_STRING( "Hello, World!" );
|
ログイン後にコピー
または文字列サイズを指定します:
1 | PRINT_STRING( "Hello, World!" , 18);
|
ログイン後にコピー
または文字列サイズとフォント スタイルの両方:
1 | PRINT_STRING( "Hello, World!" , 18, bold);
|
ログイン後にコピー
このアプローチにより、次のパラメータの処理が簡素化されます。マクロ呼び出し元、コードの再利用性と汎用性を強化します。
以上がコードをカスタマイズするために C マクロにオプションのパラメーターを実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。