Heim >Backend-Entwicklung >C++ >Wie können Sie mit C-Makros optionale und überladene Parameter erstellen?

Wie können Sie mit C-Makros optionale und überladene Parameter erstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-27 21:34:12171Durchsuche

How Can You Create Optional and Overloaded Parameters with C   Macros?

Optionale und überladene Parameter mit C-Makros

Einführung

C-Makros bieten eine praktische Methode zur Wiederverwendung und Parametrisierung von Code. Allerdings können Makros standardmäßig keine optionalen oder überladenen Parameter verarbeiten. In diesem Artikel wird eine Technik zur Überwindung dieser Einschränkung untersucht.

Lösung

Der folgende makrobasierte Ansatz ermöglicht optionale und überladene Parameter:

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

Verwendung

Diese makrobasierte Lösung bietet zwei Hauptfunktionen Vorteile:

  • Optionale Parameter: Sie können nur die erforderlichen Parameter angeben, und die fehlenden Parameter werden standardmäßig auf die entsprechenden Werte gesetzt.
  • Überladung: Verschiedene Versionen der PrintString-Funktion können basierend auf der Anzahl der übergebenen Parameter aufgerufen werden.

Sie können verwenden das PRINT_STRING-Makro wie folgt:

PRINT_STRING("Hello, World!"); // No size or style specified
PRINT_STRING("Hello, World!", 18); // Size specified
PRINT_STRING("Hello, World!", 18, bold); // Size and style specified

Implementierungsdetails

Diese Lösung verwendet mehrere Techniken:

  • Argumentzählung: Das Makro __VA_ARGS__ stellt eine durch Kommas getrennte Liste von Makroargumenten bereit. Das Makro GET_4TH_ARG wird verwendet, um die Anzahl der Argumente zu zählen und die entsprechende PrintString-Funktionsüberladung auszuwählen.
  • Rekursive Makroaufrufe: Das Makro PRINT_STRING_MACRO_CHOOSER ruft rekursiv die entsprechende Überladung von PrintString basierend auf der Anzahl auf Argumente.

Das obige ist der detaillierte Inhalt vonWie können Sie mit C-Makros optionale und überladene Parameter erstellen?. 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