Use hard tab for indentation. (size 4) Spaces between "," ex: 1, 2, 3, 4 if/else-statements: An else clause is joined to any preceding close curly brace that is part of its if. if (....) { .... } else { .... } if the line needs to be splited up, right after an if-statement use {�and }, so its clear when the if-statement ends. ex: if (...) { function(....., ......, .... ); } This is ok: if (...) shortline(...); while-statement: while (...) { .... } for-statement: for (init; condition; update) { .... } for (longinit; longcondition; longupdate ) { .... } alt form: init; for (; condition; update) { .... } do-statement: do { .... } while (...); switch-statement: should always have a default value. Enum values is an exception, they should not have a default: , when you add new values to an enum you might forget to add them to switch statement. switch (...) { case ...: ...; break; case ...: { ...; } break; case ...: ...; default: ....; break; } goto-statement: DONT USE IT! Include guards: For files with namespace: #ifndef NAMESPACE_FILENAME_HH #define NAMESPACE_FILENAME_HH .... #endif //NAMESPACE_FILENAME_HH <eof> Without namespace: #ifndef FILENAME_HH #define FILENAME_HH .... #endif //FILENAME_HH <eof> preprocessors: The # of all preprocessor commands must always be in column 1, and never use indentation for preprocessor directives They should always have a // PREPROCESSOR to mark where they end #ifdef DEBUG ... ... #endif //DEBUG Don't use preprocessors for constants or macro-functions, they can be cryptic and sometime make it hard to debug. functions: The name starts with a lowercase and then a uppercase for name separation: void functionWithAName(...) { ...; } Function comments: // This do that and that // Returns this on success else // this on failure. // TODO: if there is something to do. void functionDoes(...) { } Comments: Use // on few line comments. Use /* ... ... */ when there are a lot to comment Class: Order: public, protected and then private Class names always starts with a big letter. Class data members are prefixed by m_ , static data members are prefixed with s_ . Class member function will be organized according to creator, manipulator and accessors categories. class Classname:public AnotherClass { public: //1. public enums, structs //2. constructors and destructor //3. manipulators //4. accessors protected: //1. enums, structs //2. functions //3. variables private: //1. enums, structs //2. functions //3. variables }; struct follows the class style. namespace: namespace TheName { ...; ...; }; //end namespace TheName Don't use "using namespace thenamespace;" in header-file We don't want to force the other files, that include the file, a namespace. try/catch-statement: try { ....; } catch (...) { ....; } Variables: Avoid variables that contain mixtures of the numbers 0 & l and the letters O and 1, because they are hard to tell apart. Having a type name and a variable differing in only in case (such as: String string;) is permitted, but discouraged. Use lowercase for variables and use _ to separate names, ex: int number_of_screens; int num_colors; All constants must be in Upper case letters. enums must be in uppercase letters and not in file scope: enum {WHITE, RED, BLUE}; Other: if (strcmp(...) == 0) //good if (!strcmp()) //bad Don't create free-functions, encapsulate them in a namespace or a class and name filenames so it's clear what they hold so it's easier to find functions, classes and other stuff.