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 jben . Évalué à 4.
Je n'ai pas testé, mais ça devrait marcher:
Puis dans le code, par exemple pour utiliser
clear
:[^] # Re: Concatenation de token
Posté par Graveen . Évalué à 3.
Sympa :) je n'ai jamais vraiment exploré la puissance du préprocesseur, mais quand je vois ça je dis bravo :)
[^] # Re: Concatenation de token
Posté par foobarbazz . Évalué à 7.
Il y a plus simple :
gcc -E donne :
[^] # Re: Concatenation de token
Posté par harlock974 . Évalué à 2.
Très chouette, merci à tous les deux, ça marche !
# Si c'est verbeux, il y a une raison...
Posté par liberforce (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.