Forum Programmation.c #define une partie de nom de fonction

Posté par  . Licence CC By‑SA.
Étiquettes :
1
18
mar.
2017

Bonjour,

J'ai une librairie avec des noms de fonction inutilement longs :

void pifacecad_lcd_clear (void)
void pifacecad_lcd_home (void)
void pifacecad_lcd_display_on (void)
void pifacecad_lcd_display_off (void)
void pifacecad_lcd_blink_on (void)
void pifacecad_lcd_blink_off (void)
void pifacecad_lcd_cursor_on (void)
etc…
(C'est une librairie pour piloter un afficheur LCD avec un Raspberry Pi)

Pour simplifier l'édition du programme, j'ai voulu faire ceci :

#define pifacecad_lcd LCD

puis taper mes fonctions ainsi :

LCD_clear()
LCD_home()
etc…

Mais ça ne marche pas. La substitution se fait pour un nom complet (par exemple #define LCD_clear pifacecad_lcd_clear), mais pas pour une partie de nom. Le compilateur lit LCD_clear() tel quel, et croit que c'est une fonction non déclarée.

Je sais bien que cela ne sert pas à grand chose, et que je n'ai qu'à taper des LCD partout et faire un rechercher-remplacer à la fin, mais juste par curiosité, j'aimerais bien savoir s'il y a une astuce pour remplacer une partie de nom de fonction avec un define.

  • # Concatenation de token

    Posté par  . Évalué à 4.

    Je n'ai pas testé, mais ça devrait marcher:

    #define LCD_prefix pifacecad_lcd_
    #define CONCATi(a,b)  a ## b
    #define CONCAT2(a,b)  CONCATi(a,b)
    #define LF(a) CONCAT2(LCD_prefix,a)
    

    Puis dans le code, par exemple pour utiliser clear:

    LF(clear)();
    
  • # Si c'est verbeux, il y a une raison...

    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 28 mars 2017 à 13:34.

    On lit du code plus qu'on ne l'écrit. Détourner l'API ne me semble pas une très bonne idée, surtout si un jour toi ou ton successeur devez faire une mise à jour vers une autre bibliothèque: tu rends plus difficile de faire un grep pour retrouver les symboles en question.

    Je te conseille donc soit de faire un wrapper, avec des fonctions qui appelleront ces fonctions là, ou bien utilise de manière plus efficace le complètement automatique de ton éditeur de texte.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.