Namenskonvention für Konstruktoren und Destruktoren in C [geschlossen]

7

Angenommen, ich habe ein struct list und möchte eine "Konstruktor" - und eine "Destruktor" -Funktion bereitstellen. Wie soll ich sie benennen?

%Vor%

Gibt es eine etablierte Namenskonvention, die in der realen Welt vorherrscht?

    
fredoverflow 25.09.2012, 13:24
quelle

5 Antworten

8

Es gibt keine allgemein anerkannte Konvention.

C ++ hat natürlich die Ansichten der Menschen in dieser Angelegenheit beeinflusst.

Persönlich verwende ich new (), wenn die Funktion Speicherzuweisung durchführt, init () wenn nicht, delete () wenn Freigabe auftritt und cleanup () wenn nicht.

    
user82238 25.09.2012, 13:27
quelle
7

Die GLib / GTK-Leute haben die erstellte Konvention, _new und _free für Speicherzuweisungskonstruktoren und -destruktoren und _init und _destroy für nichtspeicherzuweisende Konstruktoren und Destruktoren zu verwenden.

Die pthread-Bibliothek scheint meistens der Konvention von _init und _destroy für Nicht-Speicher-Allokierungs-Einsen und% Co_de% für Speicherzuweisung zu folgen.

X11 verwendet _create und XOpenFoo .

Die C-Bibliothek selbst verwendet XCloseFoo wird für nicht speicherzuhaltende Bereinigungen von Strukturen wie free und glob_t verwendet.

Also, ich denke, die Antwort ist nein, aber es gibt auf jeden Fall große Gruppen von Menschen, die in bestimmten Projekten bestimmte Notationen ausgewählt haben.

    
apmasell 25.09.2012 13:45
quelle
3

Ich habe in einer Firma gearbeitet, die init / deinit als Standard verwendet hat, was gut zu sein scheint. Ich glaube, ich habe init / fini von mehr als einer Quelle gesehen, was, soweit ich das beurteilen kann, eine Einbildung ist, die Namen gleich lang zu machen.

pthread_mutex_init / pthread_mutex_destroy (wird direkt initialisiert)

sem_create / sem_destroy (gibt ein neues Handle zurück, aber beobachten, dass Posix nicht zwischen einem "destroy", das den Handle freigibt, und einem "destroy", das direkt zerstört, unterscheiden muss)

mpz_init / mpz_clear (wird direkt initialisiert)

Sie können also wahrscheinlich tun, was Sie wollen, und niemand kann sich vernünftig beschweren, dass Sie einen "Standard" ignorieren.

    
Steve Jessop 25.09.2012 13:49
quelle
1

Ich verwende die folgende Konvention:

  • Speicherzuweisung über ..._alloc()
  • Initialisierung über ..._init()
  • kombinierte Zuweisung und Initialisierung über ..._create()
  • Freigabe assoziierter Ressourcen über ..._discard()
  • Freigabe von Speicher über ..._dealloc() oder ..._free()
  • kombinierte Freigabe von Ressourcen und Speicher über ..._destroy()
Christoph 25.09.2012 13:51
quelle
0

Abhängig davon, ob es sich um "Objekt" oder ein "aktives Modul" handelt, folge ich normalerweise

Objekt :

%Vor%

Aktives Modul :

%Vor%     
Phonon 25.09.2012 13:34
quelle