Personnalisation des paramètres avec des macros C
Les macros sont un aspect fondamental de la programmation C, permettant la personnalisation et la flexibilité du code. Une exigence courante est la possibilité de définir des paramètres facultatifs dans les macros.
Paramètres facultatifs
Prenons l'exemple suivant où nous avons une macro qui imprime une chaîne :
#define PRINT_STRING(message) PrintString(message, 0, 0)
Cette macro accepte un paramètre obligatoire, le message à imprimer. Pour le rendre plus polyvalent, nous pouvons introduire des paramètres facultatifs pour la taille de la chaîne et le style de police :
#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)
Surcharge avec des macros
Pour réaliser une surcharge, nous utilisons une astuce pour compter le nombre d'arguments fournis à la macro. Ensuite, nous sélectionnons la macro d'assistance appropriée en fonction de ce nombre d'arguments :
#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, )
Utilisation
Nous pouvons désormais utiliser la macro PRINT_STRING surchargée avec des paramètres optionnels :
#define PRINT_STRING(...) PRINT_STRING_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__)
Par exemple, nous pouvons appeler la macro sans argument pour imprimer la chaîne par défaut :
PRINT_STRING("Hello, World!");
Ou spécifiez la taille de la chaîne :
PRINT_STRING("Hello, World!", 18);
Ou la taille de la chaîne et le style de police :
PRINT_STRING("Hello, World!", 18, bold);
Cette approche simplifie la gestion des paramètres pour l'appelant de macro, améliorant la réutilisabilité et la polyvalence du code.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3