Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

C++ Guidelines

6 réponses
Avatar
Gégé
Bonjour,

Je cherche des articles sur des r=E8gles =E0 adopter dans un projet C++.
Mon projet commence =E0 devenir important, et j'aimerais l'assainir d=E8s
maintenant pour =E9viter des complications futures. Auriez-vous quelques
bonnes adresses ?

-> ou faut il placer les namespace ? (j'ai cru comprendre qu'il
fallait =E9viter les ent=EAt=E9s)
-> doit-on includer un fichier commun ( si par exemple tout le projet
=E7a se servir d'une fonction de base )
-> utilisation des macros, des constantes, des enums ...
etc.

Merci
G

6 réponses

Avatar
Wykaaa
Gégé a écrit :
Bonjour,

Je cherche des articles sur des règles à adopter dans un projet C++.
Mon projet commence à devenir important, et j'aimerais l'assainir dès
maintenant pour éviter des complications futures. Auriez-vous quelques
bonnes adresses ?

-> ou faut il placer les namespace ? (j'ai cru comprendre qu'il
fallait éviter les entêtés)
-> doit-on includer un fichier commun ( si par exemple tout le projet
ça se servir d'une fonction de base )
-> utilisation des macros, des constantes, des enums ...
etc.

Merci
G


En fait tu cherches un manuel de règles de programmation C++.

Il y a ce document (en anglais), le meilleur :
www.research.att.com/~bs/JSF-AV-rules.pdf
Ou ceci (beaucoup moins complet) :
http://geosoft.no/development/cppstyle.html
Avatar
Gégé
Génial, merci !
Avatar
James Kanze
On Apr 26, 10:06 am, Gégé wrote:

Je cherche des articles sur des règles à adopter dans un
projet C++. Mon projet commence à devenir important, et
j'aimerais l'assainir dès maintenant pour éviter des
complications futures. Auriez-vous quelques bonnes adresses ?



Je ne crois pas que tu puisses en trouver un qui convient
parfaitement. Il vaut mieux en créer un toi-même, en remassant
des idées d'un peu partout. Quelques liens pour commencer :

http://www.doc.ic.ac.uk/lab/cplus/c++.rules
C'était une quasi-référence dans le temps. Très datée
aujourd'hui, mais il y a sans doute beaucoup qui vaut
encore.

http://www.boost.org/development/requirements.html
C'est les règles de Boost. Un peu spécial en partie parce
qu'ils visent une integration ultérieur dans la norme. (Ça
touche, par exemple, les conventions de nommage, mais aussi
des choses comme les questions de portabilité.)

http://pcroot.cern.ch/TaligentDocs/TaligentOnline/DocumentRoot/1.0/Docs/boo ks/WM/WM_1.html
Là aussi, pas les plus actuels, mais vaut la peine d'être
regardé.

https://developer.mozilla.org/En/Mozilla_Coding_Style_Guide and
https://developer.mozilla.org/En/C___Portability_Guide
D'une vraie application, encore actuelle.

Sinon, les livres reconnus (Scott Meyers, Herb Sutter) peuvent
aussi donner des idées.

Dans l'ensemble, en revanche, il faut garder un peu de
scepticisme ; aucune des sources ci-dessus n'est parfaites, et à
côté de beaucoup de bonnes idées, toutes contiennent soit des
mauveauses règles soit des règles trop datées à utiliser
aujourd'hui. (Donc, par exemple, plusieurs cités ci-dessus
suggèrent mettre toutes les constantes en toute majuscule, alors
qu'il s'est établi un consensus actuellement que seulement les
macros doivent être toute majuscule.)

-> ou faut il placer les namespace ? (j'ai cru comprendre
qu'il fallait éviter les entêtés)



Je ne suis pas sûr de comprendre. Les namespaces, il faut bien
les mettres dans les en-têtes, si on va s'en servir.

-> doit-on includer un fichier commun ( si par exemple tout le
projet ça se servir d'une fonction de base )



Ça dépend du projet, mais la plupart des projets que je connais
ont bien un en-tête global, qui doit toujours être inclu le
premier. Dans mon code, par exemple, il sert à définir la
version, qui se trouve encodé dans le namespace, de façon qu'on
ne peut pas compiler contre une version, et linker contre une
autre. Il sert aussi à inclure la définition de la
configuration (Windows, Unix, etc.), de façon à pouvoir
incorporer des en-têtes qui dépend de l'implémentation par la
suite, avec par exemple :

#include GB_dependentInclude(system,systemDependentHeader.hh)

-> utilisation des macros, des constantes, des enums ...
etc.



Dans l'ensemble, ça va dépendre de ton compilateur et de tes
exigeances de portabilité. (Sauf qu'on n'utilise pas les macros
pour des constantes.)

--
James Kanze (GABI Software) email:
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
espie
Le bouquin de Lakos (large scale C++ software development) est une lecture
interessante pour les gros projets.

En particulier, ca explique un peu comment bien separer ses entetes,
ce qui a l'air tout con sur les petits projets, mais devient indispensable
sur les tres gros...
Avatar
Wykaaa
Marc Espie a écrit :
Le bouquin de Lakos (large scale C++ software development) est une lecture
interessante pour les gros projets.

En particulier, ca explique un peu comment bien separer ses entetes,
ce qui a l'air tout con sur les petits projets, mais devient indispensable
sur les tres gros...


C'est toujours important de bien séparer les en-têtes , même sur des
petits projets car comme chacun sait, tout petit projet est susceptible
de devenir grand ;-)
Avatar
Mickaël Wolff
James Kanze wrote:
Je ne suis pas sûr de comprendre. Les namespaces, il faut bien
les mettres dans les en-têtes, si on va s'en servir.



Je pense qu'il a mal formulé, et que Gégé pensait à l'usage de using
dans les en-tetes.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org