Maison >développement back-end >C++ >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 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-21 04:09:14447parcourir

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

Considérez 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 un 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 maintenant utiliser la macro PRINT_STRING surchargée avec des paramètres facultatifs :

#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écifier la taille de la chaîne :

PRINT_STRING("Hello, World!", 18);

Ou les deux 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 la macro, améliorant ainsi la réutilisabilité et la polyvalence du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn