OVH Cloud OVH Cloud

pinaillage sur typedef

26 réponses
Avatar
fabien.chene
Bonjour,

Une question qui me tarabuste, Qu'est-ce qui a motivé la norme a
déclarer ce code illégal ? (selon $7.1.3.3) :

class Foo;
typedef int Foo;

A noter que l'exemple illustratif de $7.1.3.3 se sent obliger de
montrer une définition. Dans $7.1.3.3, Je note aussi que le diagnostic
indiqué de «typedef int complex;» (suite à class complex { /*
... */};) est une redéfinition (alors que typedef fait une
déclaration).


En fait, ce serait pas mal qu'un «typedef-name» soit un «class-name»,
même s'il ne nommme pas une classe. Je suppose que cela serait source
de problèmes, mais, si c'est bien le cas, j'avoue ne pas le(s) voir du
premier coup d'oeil.

Merci d'avance.

--
Fab

6 réponses

1 2 3
Avatar
Fabien LE LEZ
On Mon, 12 Jun 2006 23:03:55 +0200, (Fabien
CHÊNE):

Les idées ne manquent pas pour accélérer la compilation ... C'est
juste la volonté et le temps de les mettre en oeuvre :-(


Bah oui, mais AMHA un simple rsync sera beaucoup plus efficace et
facile à mettre en oeuvre que tout ce qui ressemble au sujet du
présent thread.

Avatar
fabien.chene
Fabien LE LEZ writes:

On Mon, 12 Jun 2006 22:20:43 +0200, (Fabien
CHÊNE):

Dans un environnement de
compilation -- que je subis -- où le réseau est lent, et les machines
bien gonflées en CPU et RAM, on arrive à des records de part de temps
de préprocessing; jusqu'à 80% du temps de compilation passé en
préprocessing :-(


C'est peut-être que le système de compilation est mal pensé ?


Tout à fait.

Peut-être faudrait-il récupérer tous les fichiers en local (avec rsync
par exemple) avant même de commencer la compilation ?


Les idées ne manquent pas pour accélérer la compilation ... C'est
juste la volonté et le temps de les mettre en oeuvre :-(
Il faut dire que quand tu es empétré/figé dans le ciment -- et non la
boue -- continuus, tout est plus compliqué :-(


--
Fab


Avatar
fabien.chene
Fabien LE LEZ writes:

On Mon, 12 Jun 2006 23:03:55 +0200, (Fabien
CHÊNE):

Les idées ne manquent pas pour accélérer la compilation ... C'est
juste la volonté et le temps de les mettre en oeuvre :-(


Bah oui, mais AMHA un simple rsync sera beaucoup plus efficace et
facile à mettre en oeuvre que tout ce qui ressemble au sujet du
présent thread.


Oui. Mais je ne cherchais pas, dans ce fil, à résoudre un problème de
temps de compilation. C'est néanmoins de là qu'est venu ma question
sur le pourquoi de la limitation de typedef.

--
Fab


Avatar
Marc Boyer
Le 09-06-2006, Fabien CHÊNE a écrit :
class Foo;
typedef int Foo;

A noter que l'exemple illustratif de $7.1.3.3 se sent obliger de
montrer une définition. Dans $7.1.3.3, Je note aussi que le diagnostic
indiqué de «typedef int complex;» (suite à class complex { /*
... */};) est une redéfinition (alors que typedef fait une
déclaration).


AMHA typedef est une definition et pas une declaration.
D'ailleurs
class Foo;
class Foo;
compile (deux declaration de la classe Foo) mais
typedef int Bar:
typedef int Bar:
ne compile pas (multiple definition).

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)

Avatar
fabien.chene
AMHA typedef est une definition et pas une declaration.


C'est quand même une déclaration.

D'ailleurs
class Foo;
class Foo;
compile (deux declaration de la classe Foo)


Oui.

mais
typedef int Bar:
typedef int Bar:
ne compile pas (multiple definition).


Ceci est pourtant valide. cf §7.1.3.2. Quel compilateur utilises-tu ?
GCC/g++ n'a pas de problème avec ceci.

(Réponse prise à partir d'un copier-coller d'un message de Marc Boyer
depuis google groups, mon serveur de news ne voyait pas ce message)


--
Fab

Avatar
Marc Boyer
Le 15-06-2006, Fabien CHÊNE a écrit :
D'ailleurs
class Foo;
class Foo;
compile (deux declaration de la classe Foo)


Oui.

mais
typedef int Bar:
typedef int Bar:
ne compile pas (multiple definition).


Ceci est pourtant valide. cf §7.1.3.2. Quel compilateur utilises-tu ?
GCC/g++ n'a pas de problème avec ceci.

(Réponse prise à partir d'un copier-coller d'un message de Marc Boyer
depuis google groups, mon serveur de news ne voyait pas ce message)


Ben oui, j'avais fait un cancel dessus, apres avori ete pris d'un
doute. En fait, c'est GCC/gcc qui rale (encore que, ca depend
des versions), mais GCC/g++ l'accepte.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)


1 2 3