Bonjour,

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
33
34
35
 
#include <stdlib.h>
#include <stdio.h>
 
#define DBG 1
 
#if DBG
#define P(x)   \
   printf ("X.%s = %u\n", #x, X. ## x)
#else
#define P(x)
#endif
 
#define UPD(x, v) \
do                \
{                 \
   X. ## x = v;   \
   X.modif = 1;   \
   P (x);         \
}                 \
while (0)
 
int main (void)
{
   struct
   {
      int a;
      int modif;
   }
   X;
 
   UPD (a, 123);
   system ("pause");
   return 0;
}
donne les informations suivantes (Dev-c++ 4.9.9.0 avec gcc/mingw 3.3.1):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Compilateur: Default compiler
Building Makefile: "D:\DevCpp\ed\Makefile.win"
Exécution de  make...
make.exe -f "D:\DevCpp\ed\Makefile.win" all
gcc.exe -c main.c -o main.o -I"D:/DEV-CPP/include"  -W -Wall -O2    
 
main.c:31:15: pasting "." and "a" does not give a valid preprocessing token
main.c:31:15: pasting "." and "a" does not give a valid preprocessing token
 
gcc.exe main.o  -o "ed01.exe" -L"D:/DEV-CPP/lib"  
 
Exécution terminée
Dans un projet plus gros, j'ai une foule de messages de ce genre, et la compilation est interrompue.

J'ai du mal à voir si c'est un problème de syntaxe (ok avec BC 3.1) de compilateur (gcc 3.3.1 serait plus 'picky') ou d'environnement (Dev-c++, config 'cachée' du compilateur)

Après consultation du net, je penche pour un problème de la version 3 de gcc. Ce problème à l'air connu, mais j'ai du mal à trouver une explication claire sur le net. Beaucoup de questions et pas de réponse à ma connaissance. (Jamais eu ce problème avec les versions gcc 3.2,x et 3.1.x).

Si quelqu'un en sais plus, je suis tout ouïe.

[EDIT]En fait il s'agit du bug 7976 (bugzilla) connu depuis gcc 3.1.x.

D'après

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7976

ce n'est pas un bug, mais une non conformité à la norme (probablement supportée silencieusement par de nombreuses implémentations) qui est maintenant signalée.

Il semblerait qu'il faille passer par des fonctions de concaténation à plusieurs niveau pour arriver à ses fins...

Je vais avoir pas mal de code à mettre à jour...
[/EDIT]

Emmanuel