Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2384 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Résolu][C] probleme avec une macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu][C] probleme avec une macro

n°1834774
ffomnislas​h
Posté le 06-01-2009 à 20:56:32  profilanswer
 

:hello:  
 
J'essaye d'écrire une macro me permettant par la suite de déclarer des setter.
 

Code :
  1. #define exalt_file_name exalt_wireless_network
  2. #define exalt_struct_type Exalt_Wireless_Network
  3. #define EXALT_STRING_SET(attribut)          \
  4.     void exalt_file_name##_##attribut##_set(                \
  5.             exalt_struct_type *s,                       \
  6.             char* attribut)                             \
  7.     {                                                   \
  8.         EXALT_ASSERT_RETURN_VOID(s!=NULL);              \
  9.         if(attribut!=NULL)                              \
  10.             s->attribut = strdup(attribut);             \
  11.         else                                            \
  12.             s->attribut=NULL;                           \
  13.     }


 
le résultat

Code :
  1. void exalt_file_name_essid_set( Exalt_Wireless_Network *s, char* essid) { .... }


 
On peut voir que l'attribut dans le nom de la fonction a bien était remplacé.
Le type du paramètre s également.
Par contre "exal_file_name" n'a pas était remplacé dans le nom de la fonction, ceci venant du fait qu'il n'est pas un paramètre de la macro.
 
Quelqu'un aurait une idée de comment réaliser ceci ? c'est possible ?
 
merci d'avance.


Message édité par ffomnislash le 06-01-2009 à 21:40:15
mood
Publicité
Posté le 06-01-2009 à 20:56:32  profilanswer
 

n°1834808
ffomnislas​h
Posté le 06-01-2009 à 21:39:20  profilanswer
 

J'ai fini par y arriver :D
 

Code :
  1. #define EXALT_FILE_NAME exalt_wireless_network
  2. #define EXALT_STRUCT_TYPE Exalt_Wireless_Network
  3. #define EXALT_STRING_SET(attribut) \
  4.     EXALT_STRING_SET1(EXALT_FILE_NAME,attribut)
  5. #define EXALT_STRING_SET1(exalt_file_name,attribut) \
  6.     EXALT_STRING_SET2(exalt_file_name,attribut)
  7. #define EXALT_STRING_SET2(exalt_file_name,attribut)                      \
  8.     void exalt_file_name##_##attribut##_set(            \
  9.             EXALT_STRUCT_TYPE *s,                       \
  10.             char* attribut)                             \
  11.     {                                                   \
  12.         EXALT_ASSERT_RETURN_VOID(s!=NULL);              \
  13.         if(attribut!=NULL)                              \
  14.             s->attribut = strdup(attribut);             \
  15.         else                                            \
  16.             s->attribut=NULL;                           \
  17.     }


 
C'est ce site qui m'a donné l'idée: http://www.delorie.com/gnu/docs/gcc/cpp_32.html
il y est dit, d'où la ruse des intermédiaire ....

Citation :

Prescan always does a complete expansion.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Résolu][C] probleme avec une macro

 

Sujets relatifs
Problème à centrer une image [RESOLU][résolu] Pb d'url avec des caractères spéciaux
Balise Object probleme IE[SGBD/SQL] probleme d'espace oracle8i
[HELP] Communiquer en C/C++ avec des API Siemens S5probleme avec un combobox
[ACCESS] Problème requête et valeur par défautlecture de contenu de plusieurs fichiers [résolu]
Erreur dans un programme basique en C 
Plus de sujets relatifs à : [Résolu][C] probleme avec une macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR