From be7b519346bc30aa95edd892ea355b3244f64b3e Mon Sep 17 00:00:00 2001 From: hsc <hsc@8c4709b5-6ec9-48aa-a5cd-a96041d1645a> Date: Wed, 6 Jun 2012 14:27:14 +0000 Subject: [PATCH] coding style update - Adhering to itself now (English!). - Removed Adrian's private preferences for weird indentation rules. git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1309 8c4709b5-6ec9-48aa-a5cd-a96041d1645a --- doc/coding-style.txt | 129 +++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 65 deletions(-) diff --git a/doc/coding-style.txt b/doc/coding-style.txt index f43a4c51..8e43a657 100644 --- a/doc/coding-style.txt +++ b/doc/coding-style.txt @@ -1,81 +1,80 @@ - - Sprache (Kommentare, SVN-Commits, Frickeleien): ausnahmslos Englisch +Coding Style for Fail* +====================== - - Einrückung: 1 Tab (entspricht 4 Spaces), bei Statements die bündig besser zu - lesen sind, ist eine Aufweichung möglich, Beispiele: - cout << "The counter value is: " - << value; - if (first_looong_condition && - second_looong_condition) { // oder für while/for/... - ... +You may violate/break any of the following rules if you have a good reason to +do so, e.g., if readability is notably enhanced. - - Namenskonventionen: - * Code-Dateien: .cc (Source), .hpp (Header), .ah (Aspect-Header), MixedCase - * Namespaces klein - * Klassen fangen mit Großbuchstaben an, dann MixedCase - * Public-Members beginnen mit Kleinbuchstaben, dann MixedCase - * Private & Protected-Member beginnen mit "m_", globale Variablen mit "g_" - * Präprozessor-Direktiven immer groß; Include-Guards für Datei MyFooBar.hpp - gemäß __MY_FOO_BAR_HPP__ - * Konstante Variablen ebenfalls immer groß - * Keine Konvention für lokale Variablen - * typedef's-Bzeichner gemäß - typedef std::whatever<type> good_name_t + - Language (comments, SVN commit messages, "temporary" stuff): English + (without exception) - - Kommentare - * Doxygen-Kommentaren: - ~ Detailiert für alle Public-Member (bzw. Funktionen), also Parameter, - Return-Wert, Seiteneffekte, ... - ~ In Kurzform für Private/Protected-Member - ~ An jedem Beginn einer (Aspekt-)Header-Datei: @brief - ~ Alle structs/classes/enums (und deren Elemente!) - * bei kompliziertem Kram (z.B.: drei verschiedene Datenstrukturen, zwischen - denen Events innerhalb von EventList hin- und herwandern können) gibt es - Kommentare nicht nur zum "was passiert hier", sondern auch zum "warum - machen wir das so" - * Innerhalb von Methoden/Funktionen "normale" C/C++ Kommentare (//, /**/) - * Keine Autorennamen oder Datum, etc. in den Code-Dateien vermerken + - Naming conventions: + * Source files: .cc (Source), .hpp (Header), .ah (Aspect Header), MixedCase + * Namespaces: lowercase + * Classes: MixedCase, starting with uppercase letter + * Public members: MixedCase, starting with lowercase letter + * Private & protected members: starting with "m_" + * Global Variables: starting with "g_" + * Preprocessor macros: uppercase + - Include guard for MyFooBar.hpp: __MY_FOO_BAR_HPP__ + * Constant variables: uppercase + * (no convention for local variables) + * typedefs: lowercase, underscores (good_name_t) - - Formatierung - * Direktiven für bedingte Kompilierung beginnen ganz vorne, außer bei - eingerückten Anweisungen: - private: | ... - int m_Bar; | #ifndef __puma - #ifndef __puma | extern int g_Foo; - boost::thread* m_pThread; | #endif - #endif | ... - ... - Zur Verdeutlichung kann ein #endif mit "// !puma" beendet werden (bei - großem vertikalem Abstand) - * Einrückungsbreite: 100 Zeichen - * public/private/protected werden 1-mal eingerückt, Methoden/Var. ebenfalls - class pferd { - public: - void eier(); + - Comments: + * Doxygen comments: + - In detail for all public members (parameters, return value, side + effects, ...) + - (At least) Briefly for private/protected members + - At the top of each (aspect) header file: @brief + - For each complex data type (and its elements) + * Explain *nontrivial* program logic not only by describing the "what's + happening here", but also the "why are we doing it this way". + * Use "normal" C/C++ comments within functions (//, /**/). + * No author names, creation dates, change logs etc. in source files. + That's why we're using a VCS. + + - Formatting: + * Indentation: 1 tab (tabstop at 4 spaces) + - may be relaxed / mixed with spaces for better readability of + multi-line statements, e.g.: + <TAB>cout << "The counter value is: " + <TAB> << value; + <TAB>if (first_looong_condition && + <TAB> second_looong_condition) { + <TAB><TAB>... + * Preprocessor directives start in column 1. + * Max. line length: 100 characters. + * "public"/"private"/"protected" has the same identation as its surrounding + "class Foo" statement (we'd waste one indentation level for every class + definition otherwise): + class Foo { + public: + <TAB>void doSomething(); } - Bei switch/case/namespaces: + Similarly (and for the same reason) for namespaces and switch/case + statements: switch (foo) { case 1: - ... + <TAB>... } - * Blöcke: '{' in derselben Zeile mit einem Space davor (namespace, class, - if, while, for, ...) - namespace pferd { - ... + * Compound statements (blocks): <Space>+'{' in the same line as its + governing control structure (if, while, for, switch, try) or + namespace/class definition: + if (something) { + <TAB>... } - * Bei Funktionsdefinitionen folgt die '{' in einer neuen Zeile, außerdem - keine Spaces. - Definition: | Deklaration: + * Function definitions are an exception to this ('{' in a new line): + Definition: | Declaration: void myFunction(int i) | void myFunction(int i); { | - ... | + <TAB>... | } | - * Space zwischen Kontrollstruktur und Klammer zur Unterscheidung von - Funktionsaufrufen (für die Bedingungen keine weiteren Spaces): + * Control structure tokens ("if", "try", ...) are followed by a single + space for better disambiguation from function definitions: if (...) { - ... + <TAB>... } else if (...) { - ... + <TAB>... } else { - ... + <TAB>... } - * return ohne Klammerung -- GitLab