Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können optionale Makroparameter in C implementiert werden?

Wie können optionale Makroparameter in C implementiert werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-15 07:53:02897Durchsuche

How Can Optional Macro Parameters Be Implemented in C  ?

Optionale Makros mit C-Präprozessor

In C können optionale Makroparameter die Codeflexibilität verbessern. Eine Methode, dies zu implementieren, sind Makros im Überladungsstil. Lassen Sie uns untersuchen, wie diese Technik funktioniert.

Ein Ansatz nutzt die Liste der Makroargumente zweimal. Zunächst wird der Name eines Hilfsmakros erstellt. Zweitens werden die Argumente an das entsprechende Hilfsmakro übergeben. Ein Standardtrick wird verwendet, um die Anzahl der Makroargumente zu bestimmen.

Betrachten Sie den folgenden Code:

enum
{
    plain = 0,
    bold = 1,
    italic = 2
};

void PrintString(const char* message, int size, int style)
{
}

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

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

int main(int argc, char * const argv[])
{
    PRINT_STRING("Hello, World!");
    PRINT_STRING("Hello, World!", 18);
    PRINT_STRING("Hello, World!", 18, bold);

    return 0;
}

Dieser Ansatz vereinfacht den Makroaufruf für den Aufrufer und erhöht möglicherweise die Komplexität für den Makroschreiber.

Das obige ist der detaillierte Inhalt vonWie können optionale Makroparameter in C implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn