UniSet 2.32.1
Некоторые соглашения о стиле написания
Заметки
Для автоматического форматирования проектов рекомендуется использовать программу astyle.

Названия

Названия Классов

Названия классов должны начинаться с большой буквы. Если название состоит из нескольких слов, то каждое слово начинается с большой буквы.

Обратите внимание, что public рекомендуется записывать с отступом перед ним.
class MyNameClass
{
public:
...
};
При записи конструктора инициализация членов класса должна записываться так:
class MyNameClass
{
public:
MyNameClass():
x(5)
{
}
private:
int x;
};

Названия переменных

Названия переменных и членов класса должны начинаться строчными буквами. Если название составное, то второе слово нужно писать с большой буквы.

Записывать переменные полностью маленькими буквами, разделяя слова подчёркиваниями, запрещается.
int myVariableName;

Названия функций

Названия функций должны начинаться с маленькой буквы. Первым должен идти глагол. Если название составное, то второе слово нужно писать с большой буквы.

Обратите внимание, что при вызове функций пробел между названием функции и скобками, содержащими параметры, не ставится. См. пример.
Называния функций полностью маленькими буквами с подчёркиваниями между словами допустимо только для тех классов, которые наследуются от библиотек, использующих аналогичную нотацию (например, gtk–)
void printFunction(void);
void debugInfo();

Названия файлов

Названия файлов должны начинаться с большой буквы. Если в файлах описывается class MyNameClass, то названия файлов должны быть соответственно MyNameClass.h и MyNameClass.cc. Что касается оформления см. Оформление заголовочных файлов и Оформление cpp-файлов

Название макросов

Определения макросов пишутся ЗАГЛАВНЫМИ БУКВАМИ (Кроме спец. макросов NameHeaderFile_H_) Описание макросов лучше производить в заголовочном файле в начале (см. Оформление заголовочных файлов). Использование макросов не рекомендуется.

Название констант и enum'ов

Названия констант и 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;
}

С короткими названиями лучше запись

if( a > b )
{
...
}

Присваивания записываются как

veryLongA = veryLongB;

для коротких переменных допустима запись

a=b;

Типы данных. Знаки, относящиеся к типу, записываются слитно с названием типа.

PointerToObject* p;
ReferenceToObject& r;

Часто используемые локальные переменные рекомендуется называть короткими именами, такими как

i,j для переменных цикла
p для указателя
it для итератора
obj для объекта

Оформление заголовочных файлов

Заголовочные файлы имеют расширение .h Кроме приведенного в примере, конечно должны быть комментарии.

/*
* Copyright (c) xxxx Name Noname
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, version 2.1.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* \file
* \brief Заголовочный файл для организации низкоуровневого ввода-вывода.
* \author Vitaly Lipatov <lav>
* \date $Date: 2005/12/03 11:13:10 $
* \par
* Этот файл предназначен для внутреннего использования в классах ввода-вывода
*/
/**************************************************************************/
#ifndef MyNameClass_H_
#define MyNameClass_H_
#include <std.h>
#include <...>
#include "myInclude.h"
#include "..."
// -----------------------------------------------------------------------
#define MY_DEFINE (x) x
// -----------------------------------------------------------------------
const float MyPI = 3.14;
enum MyEnum
{
En1, // comment 1
En2, // comment 2
En3 // comment 3
};
// -----------------------------------------------------------------------
class MyNameClass
{
public:
...
protected:
...
private:
...
};
#endif
Заметки
Большая просьба ко всем разработчикам избегать глобальных Enum-ов (как в примере), дабы избежать в последствии ошибок.

Оформление cpp-файлов

Кроме приведенного в примере, конечно должны быть комментарии.

/*
* Copyright (c) xxxx Name Noname
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, version 2.1.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* \file
* \brief Это файл обеспечения
* \author Vitaly Lipatov <lav>
* \date $Date: 2005/12/03 11:13:10 $
* Некоторые комментарии к файлу
*/
/**************************************************************************/
#include <std.h>
#include <...>
#include "MyNameClass.h"
#include "..."
// -----------------------------------------------------------------------------------------
void MyNameClass::func1(void)
{
...
}
// -----------------------------------------------------------------------------------------
void MyNameClass::func2(void)
{
...
}
// -----------------------------------------------------------------------------------------
...
// -----------------------------------------------------------------------------------------

Написание интерфейсов на языке IDL

Общая часть

Названия интерфейсов(классов), функций и переменных см. Названия. Оформление файла IDL аналогично оформлению заголовочных файлов. (См. Оформление заголовочных файлов) Название интерфейса должно образовываться от названия и добавления к нему "_i", что означает интерфейсный класс.

Имена классов реализаций

Название класса реализации должно образовываться от названия интерфейса, исключив "_i". Пример:

объявление на IDL
interface BaseProcess_i
{
...
}
объявление класса реализации
class BaseProcess:
public POA_BaseProcess_i,
public ...
{
...
}

Класс родитель для реализации

В общем случае классом родителем должен являться класс POA_имя_интерфейса. Этот класс генерируется автоматически и его описание находится в файле имя_интерфейса.hh . В особо оговариваемых случаях наследование может происходить от другого класса. Не исключается множественное наследование для добавления необходимых свойств и т.п. Вот пример наследования для реализации idl-интерфейса ContolProcess_i:

class ControlProcess:
public BaseProcess,
public POA_ControlProcess_i
{
...
}