Bonjour,

Indépendamment de la propreté du code et de l'hérésie de procéder ainsi, soit le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
#define DEFINITION_VARIABLE(_type_, _valeur_) { \
  _type_ toto;   \
  toto = (_valeur_) * ((_valeur_) - 1); \
}
 
#define COMPARE_AFFECTE(_type2_, _valeur2_) { \
  if (toto > (_valeur2_)) \
    *sortie = (_type_2)toto: \
  else \
    *sortie = (_type_2)0; \
  return; \
}
 
 
void short2int(short entree, int * sortie)
{
  DEFINITION_VARIABLE(short, entree - 2);
  COMPARE_AFFECTE(int, 125);
}
 
void short2long(short entree, long * sortie)
{
  DEFINITION_VARIABLE(short, entree + 3);
  COMPARE_AFFECTE(long , 3254);
}
 
void uchar2short(unsigned char entree, short * sortie)
{
  DEFINITION_VARIABLE(unsigned char, entree);
  COMPARE_AFFECTE(short , 17);
}
etc.

Dans chacune de mes fonctions, je vais avoir pour COMPARE_AFFECTE le message d'erreur "variable toto non déclaré".
J'avoue être surpris puisque je pensais naïvement que le pré-processeur faisait du copier / remplacer de macros avant la compilation.

J'ai raté quelque chose ?

Merci d'avance pour vos réponses.