Skip to content
Snippets Groups Projects
CODINGSTYLE.md 2.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • Amnon Heiman's avatar
    Amnon Heiman committed
    # OSv Coding Style
    
    
    This is a coding style guide for OSv.  It is meant to be helpful, not a tool
    for bikeshedding patches on the mailing list.  The use of common sense when
    applying these rules is required.
    
    Amnon Heiman's avatar
    Amnon Heiman committed
    
    
    Nadav Har'El's avatar
    Nadav Har'El committed
    ## 1. Indentation and layout
    
    Amnon Heiman's avatar
    Amnon Heiman committed
    1.1 We use 4 spaces for indentation, no tabs.
    
    1.2 switch statements, put the case with same indentation as the switch
    ```
        switch(op) {
        case 1:
                i++;
                break;
        case 2:
        case 3:
    
    Zhi Yong Wu's avatar
    Zhi Yong Wu committed
               i *= 2;
    
    Amnon Heiman's avatar
    Amnon Heiman committed
               break;
        default:
               break;
    ```
    
    1.3 Avoid multiple statements on the same line:
    ```
        i++; j++;
    ```
    
    
    Nadav Har'El's avatar
    Nadav Har'El committed
    1.4 Line length should not exceed 80 characters.
    
    ## 2. Spaces
    2.1 Use spaces around binary and ternary operators.
    ```
       a = a + 3;
       if (a == 1 || b < 2)
       a += 1;
       a = 1 + 2 * 3;
       a = b < 1 ? b : 1;
    ```
    
    2.2 Do not use spaces around unary operators.
    ```
       a = -2;
       s = *p;
       for (int i = 3; i < 10; ++i)
    ```
    
    2.3 Do not use spaces between a function and its parameters, or a
    template and its paramters.
    ```
       sqrt(2.0)
       std::vector<object*>
    ```
    
    Amnon Heiman's avatar
    Amnon Heiman committed
    
    
    2.4 Bind '*' or '&' to the type, not the variable
    ...
       int* a;
       int& b;
    ...
    
    
    Please note that the rule obviously does not make sense when multiple variables
    are declared on the same line.  In such cases, it is preferable to do:
    
    ...
       int *a, *b;
    ...
    
    
    Amnon Heiman's avatar
    Amnon Heiman committed
    ## 3. Braces
    3.1 Always use curly braces for if statement, even if it is a one line if.
    
    
    Nadav Har'El's avatar
    Nadav Har'El committed
    3.2 When a brace-delimited block is part of a statement (e.g., if, for,
    switch, WITH_LOCK, etc.), separate the open brace from the statement
    with a single space - not with a newline.
    ```
        if (a == 3) {
            ....
        }
    ````
    
    
    Amnon Heiman's avatar
    Amnon Heiman committed
    3.2 In inline method, you can use the open braces at the same line of the method.
    ```
        int get_age() {
            return age;
        }
    ```
    
    3.3 In longer method,  the opening brace should be at the beginning of the line.
    ```
        void clear()
        {
           .....
        }
    ```
    
    ## 4. Naming Convention
    4.1 Use all lower snake_case names
    
    ## 5. Commenting
    5.1 Use the // C++ comment style for normal comment
    5.2 When documenting a namespace, class, method or function using Doxygen, use /** */ comments.
    
    ## 6. Macros, Enums and RTL
    6.1 Avoid Macros when a method would do. Prefer enum and constant to macro.
    6.2 Prefer "enum class" to "enum".
    
    6.3 Macro names and enum label should be capitalized. For "enum class",
    non-capitalized values are fine.
    
    Nadav Har'El's avatar
    Nadav Har'El committed
    
    ## 7. Functions
    7.1 When declaring or defining a function taking no arguments in C++ code,
    avoid the unnecessary "void" as an argument list.
    
    This "void" was only necessary in C to maintain backward-compatibility with
    pre-1989 prototype-less declarations, but was never needed in C++ code.
    For example, write:
    
    ```C++
    void abort() {
    ```
    
    and not:
    
    ```C++
    void abort(void) {
    ```
    
    7.2 Put no space between function name and the argument list. For example:
    
    ```C++
    double sqrt(double d) {
    ```
    
    7.3 Avoid parantheses around return value
    
    "return" is not a function - it doesn't need parantheses. For example:
    
    ```C++
    return 0;
    return a + b;
    ```