Contrairement à ce que semblent penser les blaireaux du dessus, ce que tu fait n'est pas débile du tout.
Un exemple tout simple, pour code une liste générique en C, c'est bien pratique. Imaginons une liste dont les éléments peut-être n'importe quoi mais en gardant un typage fort, donc pas de pointeur.
On fait un code qui fontion sur un type générique BIDULE avec un truc du genre
typedef struct node_s node_t;
struct node_s {
node_t *next;
BIDULE value;
};
Et ensuite, si tu as besoin d'une liste de char tu fait :
#define BIDULE char
#include <listegen.inc>
Le problème c'est quand on doit manipuler plusieur liste de type différent, il faut que les struct et les fonction aient des nom différents. Pour cela il faut utiliser l'opérateur de concaténation ##.
Dans le fichier générique tu utilise le nom générique "ajout" et une fois inclut pour un type spécifique tu utilise "ajoutchar" par exemple. (En général on fait un peut plus joli mais c'est pour l'exemple)
Et tu peut inclure le fichier aussi souvent que tu veux avec plein de type différents.
------------
Donc pour revenir à ton cas, tu peut définir un identifiant unique avec un truc de la forme "bipbip##__FILE__" par exemple si tu veux une variable global qui aie un nom différent dans chaques fichiers tu fais :
#define mavar toto##__FILE__
int mavar;
En interne dans le fichier tu utilise mavar comme nom, mais une fois passée au préprocesseur elle aurra un nom unique.
# Pour faire dans le constructif
Posté par beagf . En réponse au message Macro pour définir identifiant uniques. Évalué à 2.
Un exemple tout simple, pour code une liste générique en C, c'est bien pratique. Imaginons une liste dont les éléments peut-être n'importe quoi mais en gardant un typage fort, donc pas de pointeur.
On fait un code qui fontion sur un type générique BIDULE avec un truc du genre
typedef struct node_s node_t;
struct node_s {
node_t *next;
BIDULE value;
};
Et ensuite, si tu as besoin d'une liste de char tu fait :
#define BIDULE char
#include <listegen.inc>
Le problème c'est quand on doit manipuler plusieur liste de type différent, il faut que les struct et les fonction aient des nom différents. Pour cela il faut utiliser l'opérateur de concaténation ##.
exemple :
#define TYPE char
#include <liste.inc>
Fichier liste.inc :
#define ajout ajout##TYPE
void ajout(TYPE valeur) {...}
Dans le fichier générique tu utilise le nom générique "ajout" et une fois inclut pour un type spécifique tu utilise "ajoutchar" par exemple. (En général on fait un peut plus joli mais c'est pour l'exemple)
Et tu peut inclure le fichier aussi souvent que tu veux avec plein de type différents.
------------
Donc pour revenir à ton cas, tu peut définir un identifiant unique avec un truc de la forme "bipbip##__FILE__" par exemple si tu veux une variable global qui aie un nom différent dans chaques fichiers tu fais :
#define mavar toto##__FILE__
int mavar;
En interne dans le fichier tu utilise mavar comme nom, mais une fois passée au préprocesseur elle aurra un nom unique.