Welche Namenskonventionen werden üblicherweise in C verwendet? Ich weiß, dass es mindestens zwei gibt:
- GNU / linux / K & R mit Kleinbuchstabenfunktionen
- ? Name ? mit UpperCaseFoo-Funktionen
Ich spreche nur hier von C. Die meisten unserer Projekte sind kleine eingebettete Systeme, in denen wir C verwenden.
Hier ist die, die ich für mein nächstes Projekt verwenden möchte:
C Namenskonvention
Struct TitleCase
Struct Members lower_case or lowerCase
Enum ETitleCase
Enum Members ALL_CAPS or lowerCase
Public functions pfx_TitleCase (pfx = two or three letter module prefix)
Private functions TitleCase
Trivial variables i,x,n,f etc...
Local variables lower_case or lowerCase
Global variables g_lowerCase or g_lower_case (searchable by g_ prefix)
c
naming-conventions
JeffV
quelle
quelle
Antworten:
Das Wichtigste dabei ist die Konsistenz. Trotzdem folge ich der GTK + -Codierungskonvention, die wie folgt zusammengefasst werden kann:
MAX_BUFFER_SIZE
,TRACKING_ID_PREFIX
.GtkWidget
,TrackingOrder
.gtk_widget_show()
,tracking_order_process()
.GtkWidget *foo
,TrackingOrder *bar
._refrobnicate_data_tables()
,_destroy_cache()
.quelle
static
und zu überspringen. Wenn alsogtk_widget_show()
eine Funktion mit Dateibereich wäre, würde sie einfachwidget_show()
mit einer statischen Speicherklasse hinzugefügt._
für die Implementierung und zukünftige Verwendung beginnen. Es gibt einige Ausnahmen zu Namen, die mit beginnen,_
aber meiner Meinung nach lohnt es sich nicht, sie auswendig zu lernen. Eine sichere Regel ist, niemals Namen zu verwenden, die_
in Ihrem Code beginnen. Relevanter C FAQ Eintrag: c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=decl#namespaceGlobal variables: just don't use global variables. They are evil.
- Es sei denn, Sie arbeiten an einem eingebetteten Projekt und verfügen über 1024 Byte RAM und eine 8-MHz-CPU."Strukturzeiger" sind keine Entitäten, die eine Namenskonventionsklausel benötigen, um sie abzudecken. Sie sind einfach
struct WhatEver *
. Verstecken Sie nicht die Tatsache, dass es sich um einen Zeiger handelt, der mit einem cleveren und "offensichtlichen" Typedef verbunden ist. Es hat keinen Zweck, ist länger zu tippen und zerstört das Gleichgewicht zwischen Deklaration und Zugriff.quelle
Erstens hat C keine öffentlichen / privaten / virtuellen Funktionen. Das ist C ++ und es gibt verschiedene Konventionen. In C haben Sie normalerweise:
C ++ ist komplexer. Ich habe hier eine echte Mischung gesehen. Kamelbuchstaben für Klassennamen oder Kleinbuchstaben + Unterstriche (Kamelbuchstaben sind meiner Erfahrung nach häufiger). Strukturen werden selten verwendet (und normalerweise, weil eine Bibliothek sie benötigt, andernfalls würden Sie Klassen verwenden).
quelle
external linkage
für "öffentliche Funktionen" undinternal linkage
für "private Funktionen".ALL_CAPS
wird oft auch für Enum-Werte verwendet.Weißt du, ich halte es gerne einfach, aber klar ... Also hier ist, was ich in C verwende:
i,n,c
usw. (Nur ein Buchstabe. Wenn ein Buchstabe nicht klar ist, machen Sie ihn zu einer lokalen Variablen.)lowerCamelCase
g_lowerCamelCase
ALL_CAPS
p_
dem Präfix ein hinzu. Für globale Variablen wäre esgp_var
für lokale Variablenp_var
für const-Variablenp_VAR
. Wenn Fernzeiger verwendet werden, verwenden Sie einfp_
anstelle vonp_
.ModuleCamelCase
(Modul = vollständiger Modulname oder Abkürzung mit 2-3 Buchstaben, aber immer noch inCamelCase
.)lowerCamelCase
ModuleCamelCase
ALL_CAPS
ModuleCamelCase
CamelCase
CamelCase
Ich schreibe meine Strukturen, benutze aber den gleichen Namen für das Tag und das typedef. Das Tag ist nicht für die allgemeine Verwendung vorgesehen. Stattdessen ist es vorzuziehen, das typedef zu verwenden. Ich deklariere auch das typedef im öffentlichen Modul-Header zur Kapselung weiter, damit ich den typedef'd-Namen in der Definition verwenden kann.
Vollständiges
struct
Beispiel :quelle
Codierung in C #, Java, C, C ++ und Ziel C. habe ich eine sehr einfache und klare Namenskonvention eingeführt, um mein Leben zu vereinfachen.
Zuallererst stützt es sich auf die Leistungsfähigkeit moderner IDEs (wie Eclipse, Xcode ...) mit der Möglichkeit, schnelle Informationen durch Schweben oder Klicken bei gedrückter Strg-Taste zu erhalten. Als ich dies akzeptierte, unterdrückte ich die Verwendung von Präfixen und Suffixen und andere Marker, die einfach von der IDE gegeben werden.
Dann die Konvention:
Parameter, Struktur- und Vereinigungselemente
Und das ist es.
Es gibt
quelle
Ich würde empfehlen, Kamelfall und Unterstrich nicht zu mischen (wie Sie es für Strukturmitglieder vorgeschlagen haben). Das ist verwirrend. Sie würden denken, hey ich habe,
get_length
also sollte ich wahrscheinlich habenmake_subset
und dann finden Sie heraus, dass es tatsächlich istmakeSubset
. Verwenden Sie das Prinzip des geringsten Erstaunens und seien Sie konsequent.Ich finde CamelCase nützlich, um Namen wie Strukturen, Typedefs und Enums einzugeben. Das ist aber alles. Für den Rest (Funktionsnamen, Namen der Strukturelemente usw.) verwende ich underscore_separation.
quelle
Hier ist eine (anscheinend) ungewöhnliche, die ich nützlich gefunden habe: Modulname in CamelCase, dann Unterstrich, dann Funktions- oder Dateibereichsname in CamelCase. Also zum Beispiel:
quelle
Eines verwirrt mich: Sie planen, eine neue Namenskonvention für ein neues Projekt zu erstellen. Im Allgemeinen sollten Sie eine Namenskonvention haben, die unternehmens- oder teamweit ist. Wenn Sie bereits Projekte mit einer Namenskonvention haben, sollten Sie die Konvention für ein neues Projekt nicht ändern. Wenn die obige Konvention nur eine Kodifizierung Ihrer bestehenden Praktiken ist, dann sind Sie golden. Je mehr es sich von bestehenden de facto unterscheidet Standards schwieriger wird es, sich über den neuen Standard Gedanken zu machen.
Der einzige Vorschlag, den ich hinzufügen möchte, ist, dass ich _t am Ende von Typen im Stil von uint32_t und size_t mag. Es ist sehr C-ish für mich, obwohl einige sich beschweren könnten, dass es nur "umgekehrt" ungarisch ist.
quelle
Sie sollten auch über die Reihenfolge der Wörter nachdenken , um die automatische Namensvervollständigung durchzuführen vereinfachen.
Eine gute Vorgehensweise: Bibliotheksname + Modulname + Aktion + Betreff
Wenn ein Teil nicht relevant ist, überspringen Sie es einfach, aber es sollten immer mindestens ein Modulname und eine Aktion angezeigt werden.
Beispiele:
os_task_set_prio
,list_get_size
,avg_get
OS_TASK_PRIO_MAX
quelle
Es könnte viele geben, hauptsächlich IDEs, die einige Trends diktieren, und auch C ++ - Konventionen drängen. Für C häufig:
Die ungarische Notation für Globale ist in Ordnung, aber nicht für Typen. Und selbst für triviale Namen verwenden Sie bitte mindestens zwei Zeichen.
quelle
Ich denke, diese können für Anfänger hilfreich sein: Namenskonvention von Variablen in c
quelle