Selon Cette Pile Overflow Réponse , le "_t" postfix sur les noms de type est réservé dans C. Lorsque vous utilisez Y a-t-il un schéma de dénomination standard pour les types en C? Dans d'autres langues, l'utilisation de Capscase comme Il y a donc une règle commune ou une norme pour les types de dénomination dans C? P> Typedef code> pour créer un nouveau type opaque, je suis habitué à avoir une sorte d'indication dans le Nommez qu'il s'agit d'un type. Normalement, j'irais avec quelque chose comme
hashmap_t code> mais maintenant j'ai besoin de quelque chose d'autre. P>
hashmap code> est courante, mais beaucoup de code C, je vois n'utilise pas le majuscule du tout. Capscase fonctionne assez bien avec un préfixe de bibliothèque aussi, comme
xyhashmap code>. P>
6 Réponses :
Le Directives de style Indien Hill Avoir des suggestions: P >
Les projets individuels auront sans aucun doute leurs propres conventions de dénomination. Là sont cependant quelques règles générales. P>
noms avec des traits de soulignement de direction et de fin sont réservés au système fins et ne devrait pas être utilisé pour tout nom créé par l'utilisateur. La plupart des systèmes utilisez-les pour des noms que l'utilisateur ne devrait pas avoir à savoir. Si tu dois avoir vos propres identifiants privés, commencez-les avec une lettre ou deux identifier le paquet auquel ils appartiennent. p> li>
#define code> constantes doit être dans toutes les capsules. P> li>
Les constantes d'énum sont capitalisées ou dans toutes les capsules p> li>
noms, typedf et noms variables, ainsi que la structure, l'union et Les noms d'étiquettes enum doivent être dans la baisse cas. p> li>
De nombreuses "fonctions" de macro sont dans toutes les capsules. Certaines macros (telles que getchar et puchar) sont en minuscule depuis leur peut aussi exister comme des fonctions. Les noms macro minuscules sont seulement acceptable si les macros se comportent comme un appel de la fonction, c'est-à-dire qu'ils évaluent leurs paramètres exactement une fois et font ne pas attribuer des valeurs aux paramètres nommés. Parfois, il est impossible d'écrire un macro qui se comporte comme une fonction Même si les arguments sont évalué exactement une fois. p> li>
Évitez les noms qui ne diffèrent que dans le cas, comme FOO et FOO. De la même manière, Évitez le FOOBAR et FOO_BAR. Les Le potentiel de confusion est considérable. p> li>
De même, évitez les noms qui se ressemblent. Sur de nombreux terminaux et imprimantes, 'l', '1' et 'i' a l'air tout à fait similaire. Une variable nommée 'l' est particulièrement mauvais parce qu'il a l'air si beaucoup comme la constante '1'. p> li> ul>
en général, noms globaux (y compris Enums) devrait avoir un préfixe commune identifier le module qu'ils appartenir à. Les globaux peuvent alternativement être regroupés dans une structure globale. Les noms Typedeffed ont souvent "_t" annexé à leur nom. p>
Évitez les noms qui pourraient entrer en conflit avec Divers noms de bibliothèque standard. Certains Les systèmes comprendront plus de code de bibliothèque que vous voulez. En outre, votre programme peut être étendu un jour. p> blockQuote>
Cela ne suggère-t-il pas d'utiliser exactement la même convention que l'OP a un problème? Semble répondre à une question différente de celle demandée, qui est axée sur les types.
Oui, POSIX se réserve les noms des noms de fin de compte Autre que le système fourni (et System-réservé) Si vous décidez d'utiliser des minuscules et _t code> si vous incluez l'un des en-têtes POSIX, vous êtes donc conseillé de rester clair de ceux-ci - en théorie. Je travaille sur un projet qui a dirigé des noms de tels noms deux ou trois fois au cours des vingt dernières années. Vous pouvez minimiser le risque de collision en utilisant un préfixe d'entreprise (TLA de votre entreprise et un soulignement, par exemple), ou en utilisant des noms de cas mixtes (ainsi que le suffixe
code>); Toutes les collisions que j'ai constatées ont été courtes et toutes minuscules (
dec_t code>,
loc_t code>, ...). p>
_t code> suffixe, il n'y a pas de convention largement utilisée spécifique. L'un des systèmes mixtes (Camelcase ou InitialCaps) fonctionne bien. Un préfixe systématique fonctionne bien aussi - les meilleures bibliothèques ont tendance à faire attention à cela. P>
_t code> suffixe, assurez-vous d'utiliser des noms assez longs et de vérifier avec diligence par rapport à la norme POSIX, les plates-formes primaires que vous travaillez et que vous avez Pensez que vous pourriez travailler pour éviter les conflits inutiles. Les pires problèmes viennent lorsque vous publiez un nom
exemple_t code> aux clients, puis trouvez un conflit sur une nouvelle plate-forme. Ensuite, vous devez penser à faire changer de client leur code, qu'ils sont toujours réticents à faire. Il vaut mieux éviter le problème à l'avance. P>
C réservez uniquement certains em> utilisations d'un C'est un problème général en C, car vous avez des espaces de noms extrêmement plats, et il n'y a pas de balle d'argent. Si vous connaissez les noms de capcast et ils fonctionnent bien pour vous, alors vous devriez continuer à les utiliser. Strong> Sinon, vous devrez évaluer les objectifs du projet actuel et voir la solution Meilleur répondant au mieux eux. p> _t code> suffixe. Pour autant que je puisse dire, ce n'est que des identifiants actuels se terminant par
_t code> plus n'importe quel identifiant qui démarre
int code> ou
uint code> (7.26.8). Cependant, Posix peut réserver plus. P>
+1 pour Capcase. Donne des choses agréables si vous migrez plus tard dans une langue avec des classes aussi, et c'est familier pour les noms de type.
capscase est souvent utilisé pour les types en c. p>
Par exemple, si vous regardez des projets dans l'écosystème GNOME (GTK +, GDK, GLIB, GOBJECT, CLUBLCTER, etc.), vous verrez des types comme Les régimes de nommage de type sont comme des conventions d'indentation - elles génèrent des guerres de religion avec des personnes affirmant une sorte de supériorité morale pour leur approche préférée. Il est certainement préférable de suivre le style du code existant ou de projets connexes (par exemple pour moi, Gnome au cours des dernières années.) P>
Cependant, si vous commencez à partir de zéro et que vous n'avez pas de modèle, il n'y a pas de règle dure et rapide. Si vous souhaitez coder efficacement et quitter le travail à une heure raisonnable, vous pouvez donc rentrer à la maison et avoir une bière ou autre chose, vous devriez certainement choisir un style et vous en tenir à votre projet, mais cela compte très peu exactement quel style que vous choisissez . P> GTKBUTON CODE> ou
CLUTTTTONTSAGEWINDOW < / code>. Ils
clutter_actor_get_geométrie () code>. p>
Il existe de nombreuses idées et opinions sur ce sujet, mais il n'y a pas de norme universelle pour les types de dénomination. La chose la plus importante est d'être cohérente. En l'absence de normes de codage, lors du maintien du code, résister à l'envie d'utiliser une autre convention de dénomination. Présentation d'une nouvelle convention de dénomination, même si elle est parfaite, peut ajouter une complexité inutile. p>
C'est en fait un excellent sujet à soulever lors de l'interview des gens. Je n'ai jamais rencontré un bon programmeur qui n'avait pas d'opinion à ce sujet. Aucune opinion ou aucune passion dans la réponse ne indique que la personne n'est pas un programmeur expérimenté. P>
Une solution alternative qui fonctionne raisonnablement bien est d'utiliser des majuscules pour tous les noms de type et les noms de macro. Les variables globales peuvent être Capcase (Camelback) et toutes les variables locales minuscules.
Cette technique permet d'améliorer la lisibilité et de tirer parti de la syntaxe de langues qui réduit le nombre de caractères de pollution dans des noms variables; par exemple. gvar, kvar, type_t, etc. Par exemple, les types de données ne peuvent pas être confus syntonatisés avec un autre type. p>
Les variables globales sont facilement distinguées des locaux en ayant au moins une lettre majuscule. p>
Je conviens que les signaux de soulignement préfixés ou postfixées doivent être évités dans tous les noms de jeton. P>
permet d'examiner l'exemple ci-dessous. p>
c'est facilement clair que l'inversedcount est un Global en raison de son cas. Il est tout aussi clair que INT32U et RET_ERR sont des types dues à leur sytet. Il est également clair que INTERT_VAL () est une macro en raison du fait que c'est sur le côté droit et qu'il n'y a pas de coulé, il ne peut donc pas être un type de données. P>
Une chose est sûre. Quelle que soit la méthode que vous utilisez, il devrait être en ligne avec la norme de codage de vos organisations. Pour moi, le moins d'encombrement, mieux c'est. P>
Bien sûr, le style est un problème différent. p>