Skip to content

Code style

Please follow the rules below when writing code. You can use the clang-format tool to format the code and clang-tidy to check the code.

C++

cpp
/**
 * \file
 * \brief
 * \author Name Surname <email>
 * \copyright Copyright (C) 2016-2023 I3T team, Department of Computer Graphics
 * and Interaction, FEE, Czech Technical University in Prague, Czech Republic
 *
 * This file is part of I3T - An Interactive Tool for Teaching Transformations
 * http://www.i3t-tool.org
 *
 * GNU General Public License v3.0 (see LICENSE.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
 */
#pragma once

#include <string>

const int g_val = 0;

class EditBox
{
public:
  void setName(const std::string& name)
  {
    m_boxName = name;
  }

private:
  std::string m_boxName;
};
/**
 * \file
 * \brief
 * \author Name Surname <email>
 * \copyright Copyright (C) 2016-2023 I3T team, Department of Computer Graphics
 * and Interaction, FEE, Czech Technical University in Prague, Czech Republic
 *
 * This file is part of I3T - An Interactive Tool for Teaching Transformations
 * http://www.i3t-tool.org
 *
 * GNU General Public License v3.0 (see LICENSE.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
 */
#pragma once

#include <string>

const int g_val = 0;

class EditBox
{
public:
  void setName(const std::string& name)
  {
    m_boxName = name;
  }

private:
  std::string m_boxName;
};
  • Never use using namespace std;. It can cause conflicts.
  • Never use backslashes in paths path\to\file, prefer POSIX style path/to/file (Windows can handle these paths).

Code structure

  • Static variables are declared at the beginning of the .cpp file.
  • Header files are included in groups separated by an empty line, in the following order - if possible:
    • 1. header file associated with the given .cpp file,
    • 2. STL libraries,
    • 3. external libraries of the project,
    • 4. internal header files.

Code formatting

Code formatting rules are defined in the .clang-format file. It is not possible for each piece of code to be indented by a different number of spaces, etc. IDE can load formatting rules and warn about their violation.

In general, the form of our code is based on the Microsoft code style. I would like to point out in particular writing the opening bracket of the code block on a new line (see example).

Naming

  • All classes, structures and enumerations ClassName, StructName are named in camel-case style with an initial capital letter.
  • All variables and functions myVariable are also named in camel-case style, but with a lowercase initial letter.
  • All C++ files FileUtils.[cpp/h] are named the same as classes and structures.
  • Global variables with prefix g_.
  • Member variables the same as variables, but with prefix m_. For purely data structures (without member functions) is recommended to use the struct keyword instead of class and omit the prefix m_.
  • Member static variables with prefix s_.

How to document code

The following file contains useful examples and tricks for Doxygen.

Groups

It is often useful to group member functions of classes that have something in common. Doxygen allows this using tags.

cpp
///@{
    ...
///@}
///@{
    ...
///@}

Note that you cannot nest a group into a group.

Link to Doxygen