ホームページ > バックエンド開発 > C++ > コードをカスタマイズするために C マクロにオプションのパラメーターを実装するにはどうすればよいでしょうか?

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

Susan Sarandon
リリース: 2024-11-21 04:09:14
オリジナル
430 人が閲覧しました

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

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

PRINT_STRING("Hello, World!");
ログイン後にコピー

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

PRINT_STRING("Hello, World!", 18);
ログイン後にコピー

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

PRINT_STRING("Hello, World!", 18, bold);
ログイン後にコピー

このアプローチにより、次のパラメータの処理が簡素化されます。マクロ呼び出し元、コードの再利用性と汎用性を強化します。

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

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