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

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

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

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

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 サイトの他の関連記事を参照してください。

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