J'ai un argument avec un de mes collègues concernant les directives C ++ à suivre.
Il conçoit actuellement toutes ses bibliothèques de cette façon:
- Il utilise des lettres majuscules et minuscules incohérentes dans ses noms de fichiers
- Certains de ses en-têtes n'ont pas d'extension
Je crois que le fait de ne pas avoir d'extension est réservé aux fichiers standard C ++ et que l'utilisation de lettres majuscules est sujette aux erreurs (en particulier lorsque vous traitez avec du code qui est censé fonctionner à la fois sur Windows et Linux).
Son point est qu'il suit les Qt
conventions (même pour le code qui n'utilise pas Qt) et continue de dire: "Si Qt le fait de cette façon, alors ça ne peut pas être mauvais."
Maintenant, j'essaie de garder l'esprit ouvert, mais je me sens vraiment mal quand je dois travailler sur / avec ses bibliothèques. Existe-t-il un ensemble de règles commun établi à ce sujet? La norme en dit-elle quelque chose?
Merci beaucoup.
#define signal
……… («Si Qt le fait de cette façon, alors ça ne peut pas être mauvais.») - Je ne peux pas dire que je suis personnellement d'accord avec tous leurs choix de conception.Qt
. Je pense même que c'est une bibliothèque incroyable, mais certains de leurs choix de conception me semblent vraiment mal._
du code populaire et largement utilisé, mais c'est définitivement contraire à la norme.*.hpp
pour un en-tête c ++, et tous mes outils "l'obtiennent".Réponses:
L'extension (ou son absence) ne va pas, pour autant que je sache, vous causer des problèmes. Je dirais que supprimer complètement l'extension est gênant car cela rend difficile la recherche de fichiers d'en-tête (par exemple avec les caractères génériques * .h et * .hpp) et il est plus difficile d'identifier le contenu d'un fichier (par exemple si votre éditeur s'appuie sur l'extension pour choisir le bon mode de mise en évidence de la syntaxe).
Du point de vue du code, cela ne fait pas beaucoup de différence, même le boîtier n'est pas problématique tant que vous utilisez un cas cohérent partout et ne vous fiez pas uniquement aux différences de casse pour différencier les fichiers. D'un point de vue pratique, il est plus facile de s'en tenir aux minuscules et d'avoir une extension (.h ou .hpp).
Cependant, il est plus important de choisir l'une des conventions ci-dessus pour toute votre équipe de développement et de s'y tenir . Il est bien pire de devoir rechercher comment un fichier est placé, nommé et quelle extension il utilise chaque fois que vous voulez inclure quelque chose - tout cela devrait être "devinable" en sachant ce que vous essayez d'utiliser.
la source
Il n'y a pas de règle (dans la norme) selon laquelle seuls les fichiers d'en-tête standard peuvent être sans extension; le nom de fichier peut être à peu près tout ce que vous voulez. Les bonnes pratiques générales suggèrent toutefois que:
aucun fichier ne sera jamais sans extension, et
différents types de fichiers ont des extensions différentes - en particulier, les en-têtes C ++ utilisent une extension (
.hpp
ou.hh
) différente de celle des en-têtes acceptables par un compilateur C.(Malheureusement, la deuxième règle est souvent violée, et on voit souvent des fichiers d'en-tête C ++ avec
.h
. D'après mon expérience personnelle, je peux vous assurer que cela causera des problèmes de maintenance sur la route, mais c'est une pratique courante.)En ce qui concerne la casse, une extrême prudence est requise, car les noms de fichiers sont sensibles à la casse dans certains systèmes, et pas dans d'autres. J'ai vu deux règles différentes qui fonctionnent: soit tout en minuscules dans le nom de fichier, soit le nom de fichier suit exactement les mêmes règles concernant la casse que pour les symboles en C ++.
Dans les deux cas, vous établissez des règles pour le projet, par consensus, et tout le monde les suit.
la source
Oui. Oui, c'est vraiment, vraiment possible. Leur conception de bibliothèque est "Nous voulons tellement être Java". C'est un gâchis total. La bibliothèque Standard est bien meilleure.
En outre, fondamentalement, c'est une erreur logique. La conception de Qt ne mérite d'être émulée que si vous pouvez donner des arguments logiques sur la raison pour laquelle elle est bonne, elle n'est pas bonne simplement parce que c'est Qt.
la source
Comme je le sais, depuis la norme 1998, seuls les en-têtes de bibliothèque standard seraient sans le .h. Ainsi, les fichiers d'en-tête C ++ non standard sont toujours conventionnellement écrits avec .h. Mais gardez à l'esprit que c'est une convention, vous ne pouvez utiliser aucune extension ni même extension .txt, c'est comme si vous écriviez vos classes en commençant par des minuscules, cela fonctionne toujours, mais ce n'est pas la convention.
la source
Ce sont des conventions et non des règles, il n'y a pas de contrainte pour adhérer aux conventions, mais les conventions rendent la vie plus facile quand vous venez pour référence.
selon les extensions (.h, .hpp), les fichiers qui ont été inclus dans le c ++ n'ont pas besoin d'extensions, vous devez utiliser les extensions si vous utilisez des en-têtes autres que c ++, comme les bibliothèques c ou les bibliothèques boost.
la source