OVH Cloud OVH Cloud

Bug GCC 3.3 ?

62 réponses
Avatar
Marc Boyer
Bonjour,

j'ai du mal avec un code C++, et je soupsonne un bug de GCC 3.3.x.
Je n'arrive néanmoins pas à le trouver dans la base de donnée
des bugs (mais j'utilise peut-être pas les bons mots clef).

Voilà, est-ce que le nombre de caractères significatifs pour
une classe pourrait-être tout petit en GCC 3.3 ?

J'ai deux classes template: StateSpace et StateSpaceNode,
et je me demande s'il ne les confond pas parfois.

Si vous en avez connaissance, merci de me le dire avant que je
tente le passage à GCC 3.4 (je suis pas partant, ma tentative
de passage 3.2 à 3.3 a conduit à une réinstallation complète
de la machine: oui, je suis nul en administration Linux).

Merci d'avance,
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

10 réponses

1 2 3 4 5
Avatar
Gabriel Dos Reis
Marc Boyer writes:

| In article , drkm wrote:
| > Marc Boyer writes:
| >
| >> StateSpaceNode<int, int>
| >> et il m'affiche des messages d'erreurs qui font apparaître
| >> les noms de paramêtres par défaut de StateSpace.
| >> Bien sur, aucune référence à StateSpace dans StateSpaceNode
| >> (mais beaucoup dans l'autre sens).
| >
| > Peut-être l'erreur n'est-elle générée qu'au point d'instanciation,
| > qui pourrait apparemment se trouver dans « StateSpace ». Quels sont
| > exactement les messages d'erreur ?
|
| En fait, comme l'avait deviné Fabien, j'avais une macro StateSpaceNode
| qui trainait.

Il y a pas de gens qui pensent que les macros sont un moyen sûr et
élégant de programmation.


-- Gaby

« furthermore, I'm of the opinion that Cpp must be abolished »
Avatar
Laurent Deniau
Gabriel Dos Reis wrote:
Marc Boyer writes:

| In article , drkm wrote:
| > Marc Boyer writes:
| >
| >> StateSpaceNode<int, int>
| >> et il m'affiche des messages d'erreurs qui font apparaître
| >> les noms de paramêtres par défaut de StateSpace.
| >> Bien sur, aucune référence à StateSpace dans StateSpaceNode
| >> (mais beaucoup dans l'autre sens).
| >
| > Peut-être l'erreur n'est-elle générée qu'au point d'instanciation,
| > qui pourrait apparemment se trouver dans « StateSpace ». Quels sont
| > exactement les messages d'erreur ?
|
| En fait, comme l'avait deviné Fabien, j'avais une macro StateSpaceNode
| qui trainait.

Il y a pas de gens qui pensent que les macros sont un moyen sûr et
élégant de programmation.


C'est parfois la seule solution quand on doit conserver le type ou
manipuler des tokens. Surtout tant que typeof et les compound
expressions ne sont pas standard.

-- Gaby

« furthermore, I'm of the opinion that Cpp must be abolished »


futhermore, I'm of the opinion that Cpp should only be used by
programmers which know Cpp ;-)

OOC contient pres de 200 macros (+150 pour enlever le namespace ooc_ sur
demande). Pas de probleme pourtant. J'ai juste parfois des messages
aussi abscons que les templates mais on peut pas tout avoir :-)

a+, ld.

Avatar
kanze
Gabriel Dos Reis wrote in message
news:...

« furthermore, I'm of the opinion that Cpp must be abolished »


Si cpp n'existait pas, il faudrait l'inventer:-).

Sérieusement, dans le C et le C++ actuel, cpp est nécessaire -- on ne
peut pas faire sans. Pour l'abolir, il faut d'abord qu'il y a des
alternatifs. C'est vrai que d'autres langages ont trouvé de meilleurs
solutions pour la plupart des choses qu'on fait avec cpp, mais ce sont
d'autres langages, et non le C ni le C++.

--
James Kanze GABI Software http://www.gabi-soft.fr
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

Avatar
Arnaud Meurgues
Laurent Deniau wrote:

futhermore, I'm of the opinion that Cpp should only be used by
programmers which know Cpp ;-)

OOC contient pres de 200 macros (+150 pour enlever le namespace ooc_ sur
demande). Pas de probleme pourtant. J'ai juste parfois des messages
aussi abscons que les templates mais on peut pas tout avoir :-)


J'avoue que dans le produit dont je m'occupe, on veut que le moteur ait
une connaissance des classes qu'il manipule. En l'absence
d'introspection, les macros permettent d'enregistrer la description des
classes durant l'initalisation statique et je ne sais pas comment on
pourrait s'en passer sans rendre cauchemardesque pour le développeur la
description d'une nouvelle classe.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
Marc Boyer
In article <41a30107$0$11671$, Arnaud Meurgues wrote:
Laurent Deniau wrote:

futhermore, I'm of the opinion that Cpp should only be used by
programmers which know Cpp ;-)

OOC contient pres de 200 macros (+150 pour enlever le namespace ooc_ sur
demande). Pas de probleme pourtant. J'ai juste parfois des messages
aussi abscons que les templates mais on peut pas tout avoir :-)


J'avoue que dans le produit dont je m'occupe, on veut que le moteur ait
une connaissance des classes qu'il manipule. En l'absence
d'introspection, les macros permettent d'enregistrer la description des
classes durant l'initalisation statique et je ne sais pas comment on
pourrait s'en passer sans rendre cauchemardesque pour le développeur la
description d'une nouvelle classe.


En fait, s'il est très clair pour moi qu'on ne peut pas se passer
d'un langage de macro pour faire du C (et parfois du C++), est-ce
que cpp est le bon choix ?
On utilise cpp parce qu'il vient avec le langage, mais est-ce
qu'on ne se taperait pas moins sur les doigts avec m4 ou perl ?

Marc Boyer, les doigts encore douloureux ;-)
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.


Avatar
Arnaud Meurgues
Marc Boyer wrote:

On utilise cpp parce qu'il vient avec le langage, mais est-ce
qu'on ne se taperait pas moins sur les doigts avec m4 ou perl ?


m4, je ne connais pas. Mais il faudrait me payer cher pour me faire
faire du perl.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
Marc Boyer
In article <41a30abc$0$11703$, Arnaud Meurgues wrote:
Marc Boyer wrote:

On utilise cpp parce qu'il vient avec le langage, mais est-ce
qu'on ne se taperait pas moins sur les doigts avec m4 ou perl ?


m4, je ne connais pas. Mais il faudrait me payer cher pour me faire
faire du perl.


m4, c'est un langage de macros.
Basiquement, au lieu de faire
#define NB_MAX 1024
on fait
define(NB_MAX, 1024)
mais il est beaucoup plus riche, récursif (on peut assez facilement
faire générer une liste d'indentifiants par exemple), etc.

Sinon, je citais perl mais on peut imaginer sed, awk ou autre
manipulateur de texte.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.


Avatar
Laurent Deniau
Marc Boyer wrote:
In article <41a30abc$0$11703$, Arnaud Meurgues wrote:

Marc Boyer wrote:


On utilise cpp parce qu'il vient avec le langage, mais est-ce
qu'on ne se taperait pas moins sur les doigts avec m4 ou perl ?


m4, je ne connais pas. Mais il faudrait me payer cher pour me faire
faire du perl.



m4, c'est un langage de macros.
Basiquement, au lieu de faire
#define NB_MAX 1024
on fait
define(NB_MAX, 1024)
mais il est beaucoup plus riche, récursif (on peut assez facilement
faire générer une liste d'indentifiants par exemple), etc.


Oui mais il est franchement plus complexe a utiliser que cpp. Il est
tres facile de se planter dans ce qu'on veut faire et touver les bugs
quand c'est superpose avec du C ou du C++, ca peut devinir un peu casse
tete (mon favori: gcc -E -P file.c | indent > file.i). Note que tu peux
toujours le faire dans ton makefile (P. Aubert avait utilise une passe
m4 pour la SL++ a un moment ou on s'en sortait plus avec les templates
et les namespaces).

Pour un outil standard au C, il vaut mieux s'en tenir a quelque chose de
simple...

Il manque cependant un point essentiel dans cpp du C99, la possibilite
soit de connaitre le nombre de parametres variables d'une macro variadic
(un truc du genre __VA_NUM_ARGS__ qui dit combien __VA_ARGS__ contient
de parametres), soit d'eliminer la derniere ',' lorsque le premier
parametre variadic est manquant (a-la-gcc). Les deux sont compatibles,
on pourrait avoir les deux. Le premier suffit pour resoudre les
problemes que j'ai rencontre mais necessite d'utiliser beaucoup de
macros derriere (une par valeur valide de __VA_NUM_ARGS__ par ex.). La
deuxieme n'est pas suffisante mais resoud le probleme precedant avec une
seule macro.

merci a gcc pour fournir le deuxieme point.

Sinon, je citais perl mais on peut imaginer sed, awk ou autre
manipulateur de texte.


Autant mettre tout ca dans des passes gerees par un makefile.

a+, ld.



Avatar
Marc Boyer
In article <cnv6vg$i1i$, Laurent Deniau wrote:
Marc Boyer wrote:
In article <41a30abc$0$11703$, Arnaud Meurgues wrote:

Marc Boyer wrote:


On utilise cpp parce qu'il vient avec le langage, mais est-ce
qu'on ne se taperait pas moins sur les doigts avec m4 ou perl ?


m4, je ne connais pas. Mais il faudrait me payer cher pour me faire
faire du perl.



m4, c'est un langage de macros.
Basiquement, au lieu de faire
#define NB_MAX 1024
on fait
define(NB_MAX, 1024)
mais il est beaucoup plus riche, récursif (on peut assez facilement
faire générer une liste d'indentifiants par exemple), etc.


Oui mais il est franchement plus complexe a utiliser que cpp.


Normal, il fait plus de choses :-)

Il est
tres facile de se planter dans ce qu'on veut faire et touver les bugs
quand c'est superpose avec du C ou du C++, ca peut devinir un peu casse
tete (mon favori: gcc -E -P file.c | indent > file.i). Note que tu peux
toujours le faire dans ton makefile (P. Aubert avait utilise une passe
m4 pour la SL++ a un moment ou on s'en sortait plus avec les templates
et les namespaces).

Pour un outil standard au C, il vaut mieux s'en tenir a quelque chose de
simple...


Simple oui, mais est-ce qu'un rien de sécurité en plus ne serait pas
utile.
Genre
#definelocal
pour définir une macro de portée locale, ou un
#includeonce
qui gère tout seule l'inclusion multiple, etc...

Il manque cependant un point essentiel dans cpp du C99, la possibilite
soit de connaitre le nombre de parametres variables d'une macro variadic
(un truc du genre __VA_NUM_ARGS__ qui dit combien __VA_ARGS__ contient
de parametres), soit d'eliminer la derniere ',' lorsque le premier
parametre variadic est manquant (a-la-gcc). Les deux sont compatibles,
on pourrait avoir les deux. Le premier suffit pour resoudre les
problemes que j'ai rencontre mais necessite d'utiliser beaucoup de
macros derriere (une par valeur valide de __VA_NUM_ARGS__ par ex.). La
deuxieme n'est pas suffisante mais resoud le probleme precedant avec une
seule macro.


OK

merci a gcc pour fournir le deuxieme point.

Sinon, je citais perl mais on peut imaginer sed, awk ou autre
manipulateur de texte.


Autant mettre tout ca dans des passes gerees par un makefile.


Tout à fait. C'est bien ça que je reprocherais à cpp: il
est soit trop puissant pour le C (puisqu'il permet bien plus
que les définitions de constantes et de macros), soit pas
assez puissant en tant que générateur de code C.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.




Avatar
Erwann ABALEA
On Tue, 23 Nov 2004, Marc Boyer wrote:

#includeonce
qui gère tout seule l'inclusion multiple, etc...


Comme le #import d'Objective-C, qui est déclaré deprecated par gcc?

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
On peut aussi trouver une façon de modifier l'adresse pour déclancher
les soupçons des impôts, histoire d'être aussi chiants que lui ?
-+- ALG in : GNU - Neuneu a recommandé son percepteur -+-


1 2 3 4 5