OVH Cloud OVH Cloud

[GCC] macros un peu génantes : est-ce un bug ?

11 réponses
Avatar
Christophe de VIENNE
Bonjour,

Alors que je définissais tranquillement une classe ressemblant à ceci :

class version {
int major;
int minor;
int release;
};

Je me suis rendu compte que des macros "major" et "minor" exitaient et
étaient substituées en "gnu_dev_major" et "gnu_dev_minor".

L'include incriminé est... string (indirectement) !

db_core.cc:14:1: warning: "major" redefined
In file included from /usr/include/sys/types.h:219,
from /usr/include/stdlib.h:433,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/cstdlib:52,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/bits/stl_algobase.h:67,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/bits/char_traits.h:46,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/string:47,
from db_core.hh:9,
from db_core.cc:6:
/usr/include/sys/sysmacros.h:64:1: warning: this is the location of the
previous definition


Ma question est en fait : peut-on considérer cela comme un bug de gcc
(l'inclusion de cstdlib et non stdlib.h devrait me protéger de ce genre
de surprise), et dois-je en faire un bug-report ?


A+

Christophe


--
Christophe de Vienne

1 réponse

1 2
Avatar
kanze
Christophe de VIENNE wrote:
Thomas Labourdette wrote:
Christophe de VIENNE a écrit le Mercredi 23 Mars 2005 09:51 :
James Kanze wrote:
Correction. Je viens de faire l'essai moi-même sous Linux, et il
y a effectivement des macros de ce nom dans
/usr/include/sys/sysmacros.h.


C'est bien là qu'il est défini chez moi.


Chez moi (Debian/Linux) ce fichier est inclus via
sys/types.h uniquement si __USE_BSD est définit.


J'ai la même chose. Par contre je ne sais pas pourquoi ce
__USE_BSD est défini systématiquement.


Apparamment, parce que je n'ai besoin d'aucun #define ni -D pour
que le problème se présente.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34




1 2