Bonjour,
je reprend du code (qui compilait il y a 10 ans), et j'ai quelques problèmes avec les macros.
Code C : 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 #define addfield_parse_uint(x)\ uint##x##_t addfield_parse_uint##x(char *s){\ uint##x##_t i;\ char c;\ int res; \ if(s[0] != '0' || s[1] == '\0') \ res = sscanf(s,"%"SCNu##x"%c",&i,&c); \ else if(s[1] == 'x' || s[1] == 'X') \ res = sscanf(s + 2,"%"SCNx##x"%c",&i,&c); \ else \ res = sscanf(s + 1,"%"SCNo##x"%c",&i,&c); \ if(res != 1)\ gep_erreur(1,"Cannot see an uint"#x" in '%s`\n",s);\ return i;\ } addfield_parse_uint(8); addfield_parse_uint(16); addfield_parse_uint(32); addfield_parse_uint(64);
Quand je veux compiler ça, j'obtiens ce message d'erreur :
(j'ai changé le numéro de ligne pour que ça colle avec la balise code au-dessus, sympa la nouvelle balise)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 D:\workspace\gliss\src\gep\gep_addfield.c: In function 'addfield_parse_uint8': D:\workspace\gliss\src\gep\gep_addfield.c:16:1: error: expected ')' before 'SCNx8' D:\workspace\gliss\src\gep\gep_addfield.c:16:1: error: expected ')' before 'SCNo8'
Le problème c'est que je ne comprend pas grand chose aux macros.
Là je ne comprend pas vraiment où est le problème, est-ce que quelqu'un pourrait m'expliquer ? Je n'ai pas réussi à trouver d'explications suffisamment claires sur internet (je ne connais que les #define "de base" pour remplacer une chaine par une valeur).
Edit: Le compilateur ne renvoie d'erreur que pour la macro avec 8, celles avec 16, 32, 64 passent l'étape de la compilation.
Partager