2010-11-18 3 views
2

Also hier sind zwei Funktionen, die fast das Gleiche tun.Welche Namenskonventionen folgen Sie mit Funktionen, die Speicher zuweisen?

Wie würden Sie jeden einzelnen benennen, wenn Sie beides in Ihr Projekt aufnehmen müssten?

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: Ich habe das obige Beispiel für Code-Korrektheit modifiziert (sheesh)

+2

Liebe, wie Leute über die Tatsache, dass es bereits eine toolwer() - Funktion gibt, kommentieren. Ja, ich weiß. Der Sinn dieser Funktion als Beispiel war die Vereinfachung der Frage. Es ist interessant, dass die Leute in diesen Foren gerne die Frage beantworten, die nicht gestellt wird. – theanine

+0

@ComtriS Es ist auch interessant, dass "Leute" auf diesem Board sich eher in ihrer Unwissenheit suhlen, als auf etwas korrigiert zu werden, was sie nicht "fragen". –

+0

@San Jacinto Es hat nichts mit Unwissenheit zu tun. Ich musste ein Beispiel eingeben. Der Code, den ich geschrieben habe, kann offensichtlich zur Verbesserung modifiziert werden. Der Punkt des Beispiels war, dass die Leute meine Frage verstehen konnten. – theanine

Antwort

2

Ich mag die Taligent Coding Standards, vor allem die naming conventions. Die Konvention über using special names for copy, create, and adopt routines kann hier gelten:

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

Verwenden Sie spezielle Namen für die Kopie erstellen, und adoptieren Routinen

Routinen, die zuweisen, verwalten oder übernehmen die Verantwortung für die Lagerung haben spezielle Namen und befolgen Sie die folgenden Richtlinien:

Routinen, die ein neues Objekt machen , dass der Anrufer muss löschen beginnen mit erstellen ...

Routinen, die ein bestehendes Objekt zu kopieren, wo der Anrufer die Kopie löschen müssen, mit Copy beginnen ... Eine Elementfunktion kopiert ein Objekt Copy().

Routinen, die ein Objekt und Pass Löschung Verantwortung für die Anrufer beginnen mit Orphan ...

Routinen, die ein Objekt der Anrufer zugeordnet ist und übernehmen die Verantwortung für schließlich löschen es mit Adopt beginnen akzeptieren aufgeben ... (Diese Art von Programmierung ist fehleranfällig; vermeiden Sie es wenn möglich.

)

Routinen Die Annahme, die nicht die bisherige Regelung (wie Konstrukteurs) starten Sie den Namen des Argument folgen können annehmen ...

[Inhalt] [Previous] [Next] klicken das Symbol Mail Fragen oder Korrekturen zu diesem Material zu Taligent Personal. Copyright © 1995 Taligent, Inc. Alle Rechte vorbehalten.

Danach könnte die erste Methode createLowerCaseStr() oder copyAsLowercaseStr() genannt werden. Das führende Schlüsselwort create und copy weisen auf neuen Speicher hin, der vom Aufrufer verwaltet werden muss.

Persönlich würde ich die 2. Funktion transformIntoLowercase() oder mutateIntoLowercase() nennen, aber ich tendiere zu langen Namen. Obwohl nicht von Taligent angegeben, sehe ich die führenden Schlüsselwörter transform und mutate als Hinweise für die Transformation in-Place.

+1

Genau das, was ich gesucht habe. Vielen Dank. – theanine

+0

Gut zu helfen. Das Buch ist in gedruckter Form (oder zumindest früher) erhältlich, wenn Sie etwas auf Ihrem Bücherregal haben möchten. Ich habe eine Kopie auf meiner, obwohl ich C/C++ nicht mehr mache. Dennoch sind gute Ideen oft keine gute Idee für eine einzige Sprache ... –

+0

Vielleicht ist es erwähnenswert, dass es in einigen Programmiersprachen möglich ist, gleiche Methodennamen mit unterschiedlicher Signatur (Argumente) zu verwenden. – bkausbk

1

Wenn strToLowerInPlace 'str' ergab dann könnte man einfach new_s = strToLowerInPlace(strdup(s)) schreiben. So würde ich "InPlace" fallenlassen und annehmen, dass alles in-Place war und der Anrufer könnte wie benötigt duplizieren.

(Und wenn Sie sind gehen zwei Funktionen haben, zumindest machen das Kopieren eines Anrufs die in-place one!)

0
  • es eine Funktion tolower() keine Notwendigkeit zu tun verrückt Test genannt ist und hartcodierte Transformation
  • Wenn Sie bereits eine Funktion haben, die In-Place-Lowcasing macht, warum implementieren Sie den Code in der Not-in-Place-Version neu?
  • die Namensgebung ist OK
1

1. (! Keine Zuweisungen) char *copylo(char *dst, const char *src);
2.: char *lowerize(char *data);

Verwandte Themen