OVH Cloud OVH Cloud

Comeau

13 réponses
Avatar
Fabien LE LEZ
Bonjour,

Si j'ai bien compris, les compilateurs les plus répandus parmi les
lecteurs de fclc++ semblent être Visual C++ et gcc.
Certains marginaux comme moi utilisent des compilateurs moins répandus
comme Borland C++.
Comeau, par contre, est un cas à part : il semble qu'il soit la
référence en matière de respect de la norme, mais lire fclc++ donne
l'impression qu'il ne sert que de référence.

D'où ma question : Comeau C++ est-il utilisable/utilisé comme
compilateur "principal" (i.e. de production) ?

Merci d'avance...


--
;-)

10 réponses

1 2
Avatar
Jean-Marc Bourguet
Fabien LE LEZ writes:

Si j'ai bien compris, les compilateurs les plus répandus parmi les
lecteurs de fclc++ semblent être Visual C++ et gcc.
Certains marginaux comme moi utilisent des compilateurs moins répandus
comme Borland C++.
Comeau, par contre, est un cas à part : il semble qu'il soit la
référence en matière de respect de la norme, mais lire fclc++ donne
l'impression qu'il ne sert que de référence.

D'où ma question : Comeau C++ est-il utilisable/utilisé comme
compilateur "principal" (i.e. de production) ?


Il est certainement plus utilisable comme compilateur de production
que de developpement pour les amateurs de debuggeurs: generant du C,
le debugging est parfois amusant quand il est passe et a decore les
noms.

Au boulot on ne l'a pas. Chez moi je l'utilise en parallele avec gcc
et l'un ou l'autre assez indeferemment (mais j'ai un style de
developpement sur mes petits projets perso qui se passe bien de
debuggeur; au boulot ce n'est pas tellement le cas: les donnees
importent beaucoup et on recupere beaucoup d'existant de qualite fort
variable).

Je ne sais pas quel est le fond du marche de Greg Comeau. En tout cas
l'examen des bugs que j'ai rentre doit lui avoir coute plus cher que
ce que je n'ai paye -- a moins qu'il ne considere ca comme de la
validation: tous les bugs sauf un concernait "export" que je voulais
experimenter de premiere main. L'exception etait un crash sur un code
invalide un peu tordu. En recompense j'ai eu une beta ou tous les
problemes que j'avais eu etaient fixes.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Loïc Joly
Fabien LE LEZ wrote:

Bonjour,

Si j'ai bien compris, les compilateurs les plus répandus parmi les
lecteurs de fclc++ semblent être Visual C++ et gcc.
Certains marginaux comme moi utilisent des compilateurs moins répandus
comme Borland C++.
Comeau, par contre, est un cas à part : il semble qu'il soit la
référence en matière de respect de la norme, mais lire fclc++ donne
l'impression qu'il ne sert que de référence.

D'où ma question : Comeau C++ est-il utilisable/utilisé comme
compilateur "principal" (i.e. de production) ?

Merci d'avance...


Je crois qu'il est à la base de pas mal de compilateurs C++ pour des
environnements spéciaux (embarqué, par exemple).

--
Loïc

Avatar
Windoz
Bonjour,

Je suis en train d'apprendre le C++ et je ne comprends pas le
fonctionnement de Enum.
Pourriez vous me l'expliquer?
Merci
Avatar
James Kanze
Loïc Joly writes:

|> Fabien LE LEZ wrote:

|> > D'où ma question : Comeau C++ est-il utilisable/utilisé comme
|> > compilateur "principal" (i.e. de production) ? Merci d'avance...

|> Je crois qu'il est à la base de pas mal de compilateurs C++ pour des
|> environnements spéciaux (embarqué, par exemple).

Comeau non. Le front end EDG dont se sert Comeau si. C'est aussi la base
des compilateurs Intel et SGI.

--
James Kanze
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
kanze
Windoz wrote in message
news:<ckmmh9$mlp$...

Je suis en train d'apprendre le C++ et je ne comprends pas le
fonctionnement de Enum.
Pourriez vous me l'expliquer?


Qu'est-ce que tu ne comprends pas exactement ? Une déclaration d'enum
définit un nouveau type, et des constantes symboliques pour en
représenter les valeurs.

Au délà de ça, en C++, un type défini par une déclaration d'enum peut en
prendre toutes les valeurs qui pourraient résulter d'un OU logique de
ses valeurs déclarées. Donc, il arrive qu'on voit des choses du genre :

num X { a = 0x01, b = 0x02, c = 0x04, d = 0x08 } ;
inline X operator|( X lhs, X rhs )
{
return static_cast< X >( static_cast< unsigned >( rhs )
| static_cast< unsigned >( lhs ) ) ;
}
// ...

C'est une utilisation un peu distinct de ce qu'on entend habituellement
par « type énuméré ». Mais en C++, on utilise les enum pour les deux
choses.

--
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
M. B.
a écrit dans le message de
news:
Windoz wrote in message
news:<ckmmh9$mlp$...

Je suis en train d'apprendre le C++ et je ne comprends pas le
fonctionnement de Enum.
Pourriez vous me l'expliquer?


num X { a = 0x01, b = 0x02, c = 0x04, d = 0x08 } ;
inline X operator|( X lhs, X rhs )
{
return static_cast< X >( static_cast< unsigned >( rhs )
| static_cast< unsigned >( lhs ) ) ;
}


Comment noyer un debutant en 5 lignes ...

MB


Avatar
Pierre Maurette
Windoz a écrit:

Bonjour,

Je suis en train d'apprendre le C++ et je ne comprends pas le
fonctionnement de Enum.
Pourriez vous me l'expliquer?
Pour la syntaxe, la définition officielle de enum, je pense que votre

documentation vous suffit et que vous vous demandez "A quoi ça sert?",
"Quand l'utiliser?".
Dans le cas le plus général (ce que j'écris est incomplet), certaines
données traitées par un programme sont des listes de cas possibles, en
nombre fini bien entendu, et j'ajoute en nombre fini "faible". Ces
données sont souvent testées pour orienter le traitement, aucune
opération arithmétique n'étant effectuée dessus (ça n'aurait le plus
souvent pas de sens). Disons que nous retrouverons ces données comme
valeur de retour de fonction, argument passé à une fonction, élément
de tests dans des if() ou souvent des switch...case.
Pour que le source, mais également la documentation, soit lisible, il
est utile de donner des noms parlants non seulement à la variable et à
son type, mais également à ses diverses valeurs possibles.

enum ERREUR_RECETTE{
NO_ERR,
ERR_BEURRE,
ERR_CUISSON,
ERR_SEL,
ERR_POIVRE
};

Sera utilisé par exemple par:
ERREUR_RECETTE Cassoulet(const unsigned int NbreConvives);

Ce que permet l'enum, c'est définir un type, et (en C++) de ne pouvoir
lui affecter qu'une des valeurs de l'enum.
enum SEXE{
SX_MASCULIN = 1,
SX_FEMININ = 2
};

est plus clair que: "typedef int SEXE;"
Permet d'éviter:
SEXE maurice_sexe = 18; //18 cm

De plus, il est clair que plusieurs représentations internes sont
posssibles, celle de la chaîne de caractère étant très mauvaise. Ce
que nous ferions certainement nous-mêmes, c'est établir une
correspondance entre chaque valeur de l'enum et une valeur entière
d'un type qui va bien. C'est ce que fait l'enum quand on ne lui impose
rien d'autre. Dans notre exemple, nous n'avons pas à connaitre les
valeurs numériques, ni même le type, sous-jacents. Comme souvent en
C/C++, il nous faudra nous imposer des contraintes: par exemple, ne
pas appliquer d'opérateurs arithmétiques à des variables de cette
enum. Moyennant quoi, nous pouvons ajouter lors du cycle de
développement un ERR_HUILE, et le placer dans l'enum là où bon nous
semble. On rajoute le case là où il faut, etc. et tout doit
fonctionner.

Il me semble qu'à partir du moment où le programmeur doit connaître la
valeur numérique d'un membre d'enum, on sort de l'utilisation basique
d'une enum.
Attention, ce n'est pas impossible. Les valeurs affectées sont
définies dans la norme, et beaucoup de compilateurs permettent de
forcer le type d'une enum à int. Dans l'exemple, il est tentatnt
d'écrire:
if(CodeErreur){...}
plutôt que:
if(CodeErreur != NO_ERR){...}

Même sans utiliser les valeur numériques exactes, on peut utiliser le
fait qu'elles sont par défaut ordonnées pour tester des inégalités:
if(Privilège >= PRIV_NORM){...}

Enfin, prenons le cas de la nationalité d'un individu:

enum PAYS_ORIGINE{
PAYS_FR,
PAYS_EN,
PAYS_ES
};

Nous sommes dans le cas d'une enum classique. Maintenant, intéressons
nous aux langues comprises par cet individu:

enum LANG_PIGEE{
LANG_FR,
LANG_EN,
LANG_ES
};

Bien entendu, un individu peut comprendre plus qu'une langue. C'est là
qu'intervient le message de James Kanze.
--
Pierre

Avatar
kanze
"M. B." wrote in message
news:<416f72ac$0$8674$...
a écrit dans le message de
news:
Windoz wrote in message
news:<ckmmh9$mlp$...

Je suis en train d'apprendre le C++ et je ne comprends pas le
fonctionnement de Enum.
Pourriez vous me l'expliquer?


num X { a = 0x01, b = 0x02, c = 0x04, d = 0x08 } ;
inline X operator|( X lhs, X rhs )
{
return static_cast< X >( static_cast< unsigned >( rhs )
| static_cast< unsigned >( lhs ) ) ;
}


Comment noyer un debutant en 5 lignes ...


Tu as une autre solution ?

Le problème, c'est que les enum en C++ servent en fait à deux
utilisations différentes. Pour des énumérations (et là, je ne crois pas
qu'on puisse avoir de problèmes), et pour des trucs comme ci-dessus.

J'étais sur le point de ne parler que des énumérations, parce que c'est
ceux dont un débuttant a réelement besoin. Mais je me suis dit qu'il
faut mieux au moins citer l'autre utilisation, pour le cas où il le
rencontre.

--
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
bruno_perso
Fabien LE LEZ wrote:

Bonjour,

Si j'ai bien compris, les compilateurs les plus répandus parmi les
lecteurs de fclc++ semblent être Visual C++ et gcc.
Certains marginaux comme moi utilisent des compilateurs moins répandus
comme Borland C++.
Comeau, par contre, est un cas à part : il semble qu'il soit la
référence en matière de respect de la norme, mais lire fclc++ donne
l'impression qu'il ne sert que de référence.

D'où ma question : Comeau C++ est-il utilisable/utilisé comme
compilateur "principal" (i.e. de production) ?

Merci d'avance...


En respect de la norme, de ma pratique, c'est de loin, VC++ 7.1. Au

passage, j'ai quelques problème avec VC++ 8.0 (Visual C++ 2005) qui
semble avoir ajouter quelques erreurs, c'est dommage.

Sinon, Comeau est multi-plateforme, ce qui manque à pas mal de
compilateurs commerciaux, respecte quand même bien mieux la norme que
gcc et apparait comme une alternative valable à gcc.

En développement, il est bon d'utiliser deux compilateurs. Si les
recompilations sont fréquentes, Kylix/C++Builder est le plus rapide,
suivi de près par Visual C++. GCC se classe parmi les bons derniers.
Pour exemple, sur une bibliothèque Kylix met environ 2 minutes, GCC plus
d'une heure. Et dans le cycle de développement, la vitesse de
compilation devient de plus en plus importante.
Ensuite, pour ce qui est de la compilation finale, reste à connaitre la
plateforme de destination, etc. Comeau est présent sur pas mal de
plateformes offrant une concurrence certe payante (mais peu couteuse) et
intéressante à GCC.
Actuellement, pour du code multiplateforme tournant sous
Linux/SunOS/Windows, sachant que certaines feature de C++ ne sont pas
correctement gérés pas ni par GCC, ni par SunONE, c'est Comeau qui est
utilisé comme compilateur pour ces environnements.

Avatar
bruno_perso
wrote:

"M. B." wrote in message
news:<416f72ac$0$8674$...

a écrit dans le message de
news:

Windoz wrote in message
news:<ckmmh9$mlp$...




Je suis en train d'apprendre le C++ et je ne comprends pas le
fonctionnement de Enum.
Pourriez vous me l'expliquer?





num X { a = 0x01, b = 0x02, c = 0x04, d = 0x08 } ;
inline X operator|( X lhs, X rhs )
{
return static_cast< X >( static_cast< unsigned >( rhs )
| static_cast< unsigned >( lhs ) ) ;
}




Comment noyer un debutant en 5 lignes ...



Tu as une autre solution ?

Le problème, c'est que les enum en C++ servent en fait à deux
utilisations différentes. Pour des énumérations (et là, je ne crois pas
qu'on puisse avoir de problèmes), et pour des trucs comme ci-dessus.

J'étais sur le point de ne parler que des énumérations, parce que c'est
ceux dont un débuttant a réelement besoin. Mais je me suis dit qu'il
faut mieux au moins citer l'autre utilisation, pour le cas où il le
rencontre.

--
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


Au passage, cette utilisation d'enum pose parfois des problèmes avec
certains compilateurs, notamment C++Builder. Le problème, c'est que ces
compilateurs commencant à vouloir transtyper tout et n'importe quoi en X
et s'il y a deux ou trois transtypages en concurrence, cela commence à
poser de sérieux problèmes.
Au final, c'est plus propre de déclarer des objets statiques qui
correspondent aux valeurs énumérées, c'est propre et il est possible de
controler le transtypage implicite. Mais c'est plus de travail au niveau
déclaratif.




1 2