#Contributing Your pull requests are welcome; however, they may not be accepted for various reasons. ##Guidelines for pull requests: 1. Respect Notepad++ coding style. 2. Make a single change per commit. 3. Make your modification compact - don't reformat source code in your request. It makes code review more difficult. 4. PR of reformating (changing of ws/TAB, line endings or coding style) of source code won't be accepted. Use issue trackers for your request instead. 5. Only bug-fix and feature request will be accepted. For the other things, I can run static code analysis tool myself. In short: The easier the code review is, the better the chance your pull request will get accepted. ##Coding style: ####GENERAL * Do not use Java-like braces: GOOD: ```c if () { // Do something } ``` BAD: ```c if () { // Do something } ``` * Use tabs instead of whitespaces (we usually set our editors to 4 whitespaces for 1 tab, but the choice is up to you) * Always leave one space before and after binary and ternary operators Only leave one space after semi-colons in "for" statements. GOOD: ```c if (10 == a && 42 == b) ``` BAD: ```c if (a==10&&b==42) ``` GOOD: ```c for (int i = 0; i != 10; ++i) ``` BAD: ```c for(int i=0;i<10;++i) ``` * Keywords are not function calls. Function names are not separated from the first parenthesis: GOOD: ```c foo(); myObject.foo(24); ``` BAD: ```c foo (); ``` * Keywords are separated from the first parenthesis by one space : GOOD: ```c if (true) while (true) ``` BAD: ```c if(myCondition) ``` * Use the following indenting for "switch" statements ```c switch (test) { case 1: { // Do something break; } default: // Do something else } // No semi-colon here ``` * Avoid magic numbers BAD: ```c while (lifeTheUniverseAndEverything != 42) lifeTheUniverseAndEverything = buildMorePowerfulComputerForTheAnswer(); ``` GOOD: ```c if (foo < I_CAN_PUSH_ON_THE_RED_BUTTON) startThermoNuclearWar(); ``` * Prefer enums for integer constants ####NAMING CONVENTIONS * Classes (camel case) : GOOD: ```c class IAmAClass {}; ``` BAD: ```c class iAmClass {}; class I_am_class {}; ``` * methods (camel case + begins with a lower case) method parameters (camel case + begins with a lower case) GOOD: ```c void myMethod(uint myVeryLongParameter); ``` * member variables Any member variable name of class/struct should be preceded by an underscore ```c public: int _publicAttribute; private: int _pPrivateAttribute; float _pAccount; ``` * Always prefer a variable name that describes what the variable is used for GOOD: ```c if (hours < 24 && minutes < 60 && seconds < 60) ``` BAD: ```c if (a < 24 && b < 60 && c < 60) ``` ####COMMENTS * Use C++ comment line style than c comment style GOOD: ``` // Two lines comment // Use still C++ comment line style ``` BAD: ``` /* Please don't piss me off with that */ ``` ####BEST PRACTICES * Prefer this form : ```c ++i ``` to ```c i++ ``` (It does not change anything for builtin types but it would bring consistency) * Avoid using pointers. Prefer references. You might need the variable to be assigned a NULL value: in this case the NULL value has semantics and must be checked. Wherever possible, use a SmartPtr instead of old-school pointers. * Avoid using new if you can use automatic variable. * Don't place any "using namespace" directives in headers * Compile time is without incidence. Increasing compile time to reduce execution time is encouraged. * Code legibility and length is less important than easy and fast end-user experience.