# Code Style Guidelines ## Basics Basic statements: ```c++ void global_function(int arg1, int arg2, int arg3, ...) { int value; const int constValue = 0; if (condition) { ... } for (int i=0; i<10; ++i) { ... } while (condition) { ... } do { ... } while (condition); switch (condition) { case 1: ... break; case 2: { int varInsideCase; ... break; } default: break; } } ``` ## Namespaces Define namespaces with lower case: ```c++ namespace app { ... } // namespace app ``` ## Classes Define classes with `CapitalCase` and member functions with `camelCase`: ```c++ class ClassName { public: ClassName(); virtual ~ClassName(); int memberVar() const { return m_memberVar; } void setMemberVar(); protected: void protectedMember(); private: int m_memberVar; }; ``` ## C++11 We are using some C++11 features, mainly: * Use `nullptr` instead of `NULL` macro * Use `auto` for complex types, iterators, or when it's variable type obvious (e.g. `auto s = new Sprite;`) * Use range-based for loops (`for (const auto& item : values) { ... }`) * Use template alias (`template alias = orig;`) * Use non-generic lambda functions * Use `std::shared_ptr` and `std::unique_ptr` (currently we're using `base::SharedPtr` and `base::UniquePtr` but you should use the STL ones now) * You can use ``, ``, ``, and `` * We use GCC 4.8 on Linux, so check the features available since GCC 4.8 in https://developer.mozilla.org/en-US/docs/Mozilla/Using_CXX_in_Mozilla_code