mirror of
https://github.com/aseprite/aseprite.git
synced 2025-01-03 14:40:02 +00:00
94 lines
1.6 KiB
Markdown
94 lines
1.6 KiB
Markdown
# 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<typename T> alias = orig<T>;`)
|
|
* 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 `<atomic>`, `<thread>`, `<mutex>`, and `<condition_variable>`
|
|
* 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
|