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 Makro PRINT_STRING benötigt 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.
Das obige ist der detaillierte Inhalt vonWie kann ich optionale Parameter in C-Makros simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!