"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter des paramètres facultatifs dans les macros C++ pour la personnalisation du code ?

Comment implémenter des paramètres facultatifs dans les macros C++ pour la personnalisation du code ?

Publié le 2024-12-21
Parcourir:483

How can you implement optional parameters in C   macros for code customization?

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.

Dernier tutoriel Plus>

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