Quelles conventions de dénomination suivez-vous avec les fonctions d’allocation de mémoire?

Donc, voici deux fonctions qui font presque la même chose.

Comment nommeriez-vous chacun d’eux, si vous deviez inclure les deux dans votre projet?

void strToLower1(char* str) { int len = strlen(str); int i; for (i=0; i<len; i++) str[i] = tolower(str[i]); } char* strToLower2(const char* inputStr) { char* str = strdup(inputStr); strToLower1(str); return str; // must be freed } 

EDIT: j’ai modifié l’exemple ci-dessus pour l’exactitude du code (sheesh)

J’aime beaucoup les normes de codage Taligent , en particulier les conventions de dénomination . La convention sur l’ utilisation de noms spéciaux pour les routines de copie, de création et d’adoption peut s’appliquer ici:

http://pcroot.cern.ch/TaligentDocs/TaligentOnline/DocumentRoot/1.0/Docs/books/WM/WM_67.html#0

Utiliser des noms spéciaux pour copier, créer et adopter des routines

Les routines qui allouent, gèrent ou assument la responsabilité du stockage ont des noms spéciaux et respectent les consignes suivantes:

Les routines qui créent un nouvel object que l’appelant doit supprimer commencent par Créer …

Les routines qui copient un object existant, dans lesquelles l’appelant doit supprimer la copie, commencent par Copier … Une fonction membre qui copie un object doit être Copier ().

Les routines qui abandonnent un object et transmettent la responsabilité de suppression à l’appelant commencent par Orphan …

Les routines qui acceptent un object atsortingbué par l’appelant et prennent la responsabilité de le supprimer commencent par Adopt … (Ce style de programmation est sujet à des erreurs; évitez-le si possible.)

Les routines d’adoption qui ne peuvent pas suivre la règle précédente (comme les constructeurs) commencent le nom de l’argument avec adopt …

[Table des matières] [Précédent] [Suivant] Cliquez sur l’icône pour envoyer des questions ou des corrections sur ce matériau au personnel de Taligent. Droits d’auteur © 1995 Taligent, Inc. Tous les droits sont réservés.

Ensuite, la première méthode pourrait s’appeler createLowerCaseStr() ou copyAsLowercaseStr() . Le mot-clé principal, create et copy indique une nouvelle mémoire qui doit être gérée par l’appelant.

Personnellement, j’appellerais la 2ème fonction transformIntoLowercase() ou mutateIntoLowercase() , mais j’ai tendance à mutateIntoLowercase() vers des noms longs. Bien que cela ne soit pas spécifié par Taligent, je considère que les principaux mots clés se transform et se mutate en indices de transformation effectués sur place.

Si strToLowerInPlace renvoyé ‘str’, vous pouvez simplement écrire new_s = strToLowerInPlace(strdup(s)) . Ainsi, j’abandonnais “InPlace” et supposais que tout était en place et que l’appelant pouvait dupliquer au besoin.

(Et si vous allez avoir deux fonctions, faites au moins la copie appeler celle in-situ!)

1er: char *copylo(char *dst, const char *src); (pas d’allocation!)
2nd: char *lowerize(char *data);

  • il existe une fonction appelée tolower() inutile de faire des tests loufoques et une transformation codée en dur
  • si vous avez déjà une fonction faisant de la minuscule sur place, pourquoi réimplémentez-vous le code dans la version non-en place?
  • le nom est OK