Makros mit variablen Parametern in C
Optionale Parameter bieten eine bequeme Möglichkeit, Parameter mit Standardwerten anzugeben und bieten Flexibilität bei Funktionsaufrufen. Während C optionale Parameter in Makros nicht nativ unterstützt, gibt es Techniken, die dieses Verhalten simulieren können.
Ein Ansatz beinhaltet die Verwendung eines rekursiven Makromusters. Nehmen wir ein Beispiel:
#define PRINT_STRING(message, ...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__) #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)
Das PRINT_STRING-Makro akzeptiert eine variable Anzahl von Argumenten. Das Makro PRINT_STRING_MACRO_CHOOSER verwendet eine Liste von Argumenten zweimal: einmal, um das richtige Hilfsmakro (PRINT_STRING_1_ARGS, PRINT_STRING_2_ARGS oder PRINT_STRING_3_ARGS) basierend auf der Anzahl der Argumente zu bestimmen, und erneut, um die Argumente an das ausgewählte Hilfsmakro zu übergeben.
So verwenden Sie es:
PRINT_STRING("Hello, World!"); // Defaults to no size or style PRINT_STRING("Hello, World!", 18); // Specifies only size PRINT_STRING("Hello, World!", 18, bold); // Specifies both size and style
Dieser Ansatz stellt optionale Parameter in Makros bereit, sodass der Aufrufer nur die Parameter angeben kann, die er benötigt. Es erfordert jedoch die Definition mehrerer Hilfsmakros, die für eine größere Anzahl optionaler Parameter ausführlich werden können.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3