Wie bei anderen C-style Fragen, einfach konsistent sein. Es gibt keine Möglichkeit, dass Sie den Namespace jeder Bibliothek kennen, die jemand in Zukunft mit Ihrem Programm verknüpfen könnte. Warum? Viele von ihnen wurden noch nicht geschrieben :)
Als solche ist es keine Frage der Wächter, es ist eine Frage, was man den Header an erster Stelle nennen.
Ich könnte mit ein paar coole neue String-Utilities, und nennen Sie die Überschrift streusel. Das ist eine schlechte Idee, denn (sicherlich) hat jemand anderes coole neue String-Utilities gefunden und den Header gleich benannt.
So nenne ich mein post_strutils.h und:
#ifndef POST_STRUTILS_H
#define POST_STRUTILS_H
/* code */
#endif
ich selbst es post_str_utils.h
nennen können und definieren die Wachen angemessen sind, weil ich weiß, dass ich eine sehr häufige Nachnamen haben. Einen Namensraum zu finden ist manchmal schwierig. Einfach mit einem bietet keine Garantie, dass jemand anderes eine Suche vor der Freigabe von etwas in die Wildnis durchgeführt hat. Sei so einzigartig wie möglich.
Je nachdem, wo jemand seinen Compiler anweist, nach Kopfzeilen zu suchen, kommen nicht nur Namespace-Konflikte ins Spiel, sondern auch die Dateinamen. Geben Sie Ihr Bestes, um den Header eindeutig zu benennen, und schreiben Sie dann den Include-Guard, um ihn anzupassen. Jemand könnte wollen, #error
, wenn die Überschrift mehrfach enthalten ist, wenn nur #include
Direktiven zu schneiden, die nicht benötigt werden, mit einer UUID Art macht dies so verwirrend, da es nicht übereinstimmt (oder sogar ähneln) den Dateinamen des Headers in Frage. Es macht auch grep/awk
(oder ähnliche) powered Lint-Skripte schwieriger zu schreiben.
Ich sage nicht, dass Sie jede Bibliothek/jedes Modul nach sich selbst benennen sollten, aber achten Sie darauf, dass die Namen der öffentlichen Header-Dateien eindeutig sind. Eine schnelle Konferenz mit einer Suchmaschine wird Ihnen sagen, ob Sie auf einen unbenutzten Namespace treffen. Bitte lassen Sie die Include-Wachen mit der Kopfzeile übereinstimmen (oder zumindest sehr ähnlich). Auch hier wird Konsistenz hoch gelobt. Von Ihrem Beispiel, würde ich erwarten:
int blahfoo_init(void);
double blahfoo_getval(blahfoo_t *blah);
Wenn Sie die Mühe, einen eindeutigen Namespace zu finden, zu gehen, sollten Sie es verwenden :)
FYI, das * Muster * ist ein ** umfassen genannt bewachen**. –