Названия классов должны начинаться с большой буквы. Если название состоит из нескольких слов, то каждое слово начинается с большой буквы.
- Обратите внимание, что public рекомендуется записывать с отступом перед ним.
class MyNameClass
{
public:
...
};
При записи конструктора инициализация членов класса должна записываться так: class MyNameClass
{
public:
MyNameClass():
x(5)
{
}
private:
int x;
};
Названия переменных и членов класса должны начинаться строчными буквами. Если название составное, то второе слово нужно писать с большой буквы.
- Записывать переменные полностью маленькими буквами, разделяя слова подчёркиваниями, запрещается.
Названия функций должны начинаться с маленькой буквы. Первым должен идти глагол. Если название составное, то второе слово нужно писать с большой буквы.
- Обратите внимание, что при вызове функций пробел между названием функции и скобками, содержащими параметры, не ставится. См. пример.
- Называния функций полностью маленькими буквами с подчёркиваниями между словами допустимо только для тех классов, которые наследуются от библиотек, использующих аналогичную нотацию (например, gtk--)
void printFunction(void);
void debugInfo();
Названия файлов должны начинаться с большой буквы. Если в файлах описывается
class MyNameClass, то названия файлов должны быть соответственно
MyNameClass.h и
MyNameClass.cc. Что касается оформления см.
Оформление заголовочных файлов и
Оформление cpp-файлов
Определения макросов пишутся ЗАГЛАВНЫМИ БУКВАМИ (Кроме спец. макросов
NameHeaderFile_H_) Описание макросов лучше производить в заголовочном файле в начале (см.
Оформление заголовочных файлов). Использование макросов
не рекомендуется.
Названия констант и enum'ов начинаются с большой буквы.
const int MyConst;
enum MyEnum { One, Two, Three };
Ширина текста программы не должна превышать 78 символов для возможности отображения на всех терминалах и печати на принтере. Отступы в программе должны формироваться исключительно знаками табуляции.
- Каждый может выбирать в настройках того редактора, который он использует, сколько пробелов (4 или 8) использовать знак табуляции. Рекомендуется 4 знака. В редакторе mcedit в меню Настройка->Разное должно быть отключено "Симулировать неполную табуляцию".
- Фигурные скобки во всех случаях записываются одна под другой.
- Условия. Скобки записываются через пробел после if. Не используйте лишних скобок при записи || и &&
function (void)
{
body of the function;
if (a > b || a < c)
{
body of the condition;
}
else if (x > y)
{
body of the not condition;
}
}
При длинных названиях переменных рекомендуется записывать содержимое круглых скобок как в примере ниже
if ( veryLongA > veryLongB )
{
body of the condition;
}
С короткими названиями лучше запись
Присваивания записываются как
для коротких переменных допустима запись
Типы данных. Знаки, относящиеся к типу, записываются слитно с названием типа.
PointerToObject* p;
ReferenceToObject& r;
Часто используемые локальные переменные рекомендуется называть короткими именами, такими как
- i,j для переменных цикла
- p для указателя
- it для итератора
- obj для объекта
Заголовочные файлы имеют расширение .h Кроме приведенного в примере, конечно должны быть комментарии.
#ifndef _INDICATORLOGIC_H
#define _INDICATORLOGIC_H
#include <objects/AbstractLogic.h>
#include <UniSetTypes.h>
#include <global_macros.h>
namespace UniWidgets
{
class Indicator;
class IndicatorLogic : public AbstractLogic
{
public:
IndicatorLogic();
explicit IndicatorLogic(Gtk::EventBox::BaseObjectType* gobject);
virtual ~IndicatorLogic();
virtual void connect();
protected:
virtual void on_init();
private:
Indicator* current_indicator_;
void constructor();
void init_value();
void set_value(const double value);
void set_current_value();
void sensor_handler(UniSetTypes::ObjectId sensor, UniSetTypes::ObjectId node, float value);
void set_sensor_handler();
DISALLOW_COPY_AND_ASSIGN(IndicatorLogic);
ADD_PROPERTY( value_ai, UniSetTypes::ObjectId )
ADD_PROPERTY( node, UniSetTypes::ObjectId )
};
}
Кроме приведенного в примере, конечно должны быть комментарии.
#include "IndicatorLogic.h"
#include "SimpleObject.h"
#include "Indicator.h"
#include "types.h"
#include <uniwidgets/ConfirmSignal.h>
using namespace std;
using namespace UniWidgets;
using namespace UniWidgetsTypes;
using namespace UniSetTypes;
#define INDICATORLOGIC_VALUE_AI "value-ai"
#define INDICATORLOGIC_NODE "node"
#define INIT_INDICATORLOGIC_PROPERTIES() \
value_ai(*this, INDICATORLOGIC_VALUE_AI, UniSetTypes::DefaultObjectId)\
,node(*this, INDICATORLOGIC_NODE , UniSetTypes::DefaultObjectId)
void IndicatorLogic::constructor()
{
current_indicator_ = NULL;
}
IndicatorLogic::IndicatorLogic() :
Glib::ObjectBase("indicatorlogic")
,INIT_INDICATORLOGIC_PROPERTIES()
{
constructor();
}
IndicatorLogic::IndicatorLogic(Gtk::EventBox::BaseObjectType* gobject) :
AbstractLogic(gobject)
,INIT_INDICATORLOGIC_PROPERTIES()
{
constructor();
}
...