Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Опросы > Какой indent style вы используете в коде Си/Си++?


Автор: srd 11.12.2005, 09:12
Идея опроса родилась http://forum.vingrad.ru/index.php?showtopic=73452&st=15&hl=
Что из себя представляет каждый стиль, можно посмотреть http://en.wikipedia.org/wiki/Indent_style.
smile

Автор: Void 11.12.2005, 10:51
K&R

Давайте еще делиться соглашениями именования smile У меня примерно так:
классы и параметры шаблонов: PascalStyle
методы, свободные функции, пространства имен: lowercase_with_underscores
typedef'ы и мелкие структуры: lowercase_with_suffix_t
локальные переменные: camelCase или with_underscores
закрытые члены классов: lowercase_with_trailing_

Автор: Дрон 11.12.2005, 11:45
Года 3 назад писал в K&R, теперь BSD/Allman (судя по Вике -- сам-то я никогда не задумывался о названиях).

Цитата(Void @ 11.12.2005, 10:51)
Давайте еще делиться соглашениями именования

Пожалуйста smile

Всё PascalStyle, за исключением camelCase для локальных переменных, параметров и защищённых полей.

Сивол подчёркивания вообще не использую.

Автор: Sardar 11.12.2005, 13:09
K&R

На C++ ничего серьёзного не писал, сейчас по проекту только на C, вылилось в такие правила:

typedef'ы со структурами с заглавной буквы:
Код
typedef struct Hashtable {
//.....
} Hashtable;


typedef'ы с примитивами в верхнем регистре, например UINT24.

Все функции работающие с определёнными обьектами/структурами получают префикс имя обьекта, само же имя функции начинаеться с прописной (camelCase):
Код
HashtableEntry * Hashtable_getEntry(Hashtable *table, char *key);

Короче это методы класса Hashtable smile

Локальные переменные через '_', поля структур camelCase.

Первым языком был Java, потому ООП в крови smile Не понимаю суфиксов _t, _s, _enum и т.д. по моему убивают читабельность.

Автор: DeadSoul 11.12.2005, 13:26
use BSD.
Цитата(Void @ 11.12.2005, 10:51)
Давайте еще делиться соглашениями именования 

С эти сложнее smile Обычно стараюсь использовать стиль пинятый в текущей команде

Автор: Void 11.12.2005, 13:35
Цитата(DeadSoul @ 11.12.2005, 15:26)
Обычно стараюсь использовать стиль пинятый в текущей команде

Это-то понятно, имеется в виду, какой стиль ты бы сам установил smile

Автор: DeadSoul 11.12.2005, 14:12
Цитата(Void @ 11.12.2005, 13:35)
Цитата (DeadSoul @ 11.12.2005, 15:26)
Обычно стараюсь использовать стиль пинятый в текущей команде
Это-то понятно, имеется в виду, какой стиль ты бы сам установил 

Крайне ограниченное использование венгерки, т.е. только
m_ - для членов класса
g_ - для глоюальным переменных
s_ - для статических членов класса( под вопросом )
p - для указателей

Автор: Mayk 15.12.2005, 10:52
комбинированный
Код

#ifndef __INCLUDED_filename_h //имя __INCLUDED_filename_h генерируется автоматически самописной на bash'e тулзой
#define  __INCLUDED_filename_h
namespace Namespace
{namespace OtherNamespace
{

// имя класса для pImpl'а - имя класса с постфиксом Priv
class ClassNamePriv; 

//имя класса с большой буквы
class ClassName
{   
    public:     //объявление типов и констант
    typedef SomeType SomeOtherType;
    typedef SomeType2 SomeOtherType2;
    typedef enum {Enumeration1, Enumeration2}Enumeration;
    const static int SomeConstValue=342;

    public: //еще одна public с методами. enter перед public: обязателен
    //имена ф-ций с малой буквы
    void methodName(Enumeration enumeration){ //если не теряется смысл, то имя переменной есть имя класса (или часть)  с малой буквы
            ....
    int getProperty() const; //получение/установка  с помошью get/set. получение ссылки 
    void setProperty(int propValue);
    private:
    int m_varName; //все данные-члены имеют префикс m_
    int m_blabla;
    //все константы начинаются с большой буквы
    const static int ConstValue;
    ClassNamePriv* m_priv;
};
}}
#endif

void ClassName::methodName() //ентер м/ду ( ) и {  обязателен для всех нетривиальных ф-ций
{
#define MACRO_NAME(__arg1, __arg2) something(_arg1)  + something(_arg2)
//макросы, которые требуются для предотвращения cut/paste объявляются в теле ф-ции
#undef MACRO_NAME
//там же уничтожаются

        if( val == 5 ){ //пробелы м-ду  операторами   (так делают в q3. Выглядит читабельнее if (val==5))
             
                //размер tab'а - 8 символов. 
        }//левая { идет на строке с условием, правая  на уровне if'а
       int var=3; //с малой буквы, обычно инициализирована.
}


//get/setы пишутся в две строки
int ClassName::getProperty() const
{ return m_var; }

void ClassName::setProperty(int val)
{if(valid(val))m_var=val; else m_var = nearestToValid(val);}

//или в три для template
template <class _Tp, int Max> //все типы имеют префикс _, константы по прежнему с большой буквы
int ClassName<_Tp, Max>::get() const //если на место _Tp можно подставить int, то class  _Tp -заменяется на typename _Tp
{return m_var;}


Имена аргументов - в операторах - lhs и rhs.
В методах другой объект того же типа обзываю other, текущий(*this) если требуется, то self (так в quakec делалось) .
Возвращаемое значение обычно носит имя rc
Исключения обычно наследуются от logic_error.


Вот примерно так
UPDATE:

Класс ClassName объявляет ClassNamePriv другом.
ClassNamePriv объявляет другом ClassName.
ВСЁ без исключения в ClassNamePriv объявлено как private.
Ах да.
Перед СЛОЖНОЙ ф-цией идёт описание её алгоритма в комментариях. Вот так вот:
Код

/*
 Вычисление точки пересечения двух линий.
 Имеем
    x-x0         y - y0
   -------- =   --------
      a             b
и
    x-x1         y - y1
   -------- =   --------
      c             d

Приравниваем, получаем ...

*/
Point2D Line2D::intersection(const Line2D& other){
        const double a = m_direction.x, b=m_direction.y; //имена переменных берем из комментария
        const double c = other.m_direction.x, d = other.m_direction.y;
        const double x0 = m_point.x, y0 = m_point.y ;
        const double x1 = other.m_point.x, y1 = other.m_point.y;
       .... расчёт ....
}

Иногда с рисунком

Код

#if 0
(vim подсвечивает это как комментарий - так комментю только в .c[pp], не в хедерах)
Пересечение прямоугольников
             ############
             ############
           $$@@##########
           $$@@##########
           $$$$
#endif

Автор: Exception 15.12.2005, 11:29
Мой код (правда, не С++)
Код

Class MyNewClass
Private _myVar As String 'private начинаю с _, второе слово - с заглавной.
Public Sub MyMethod(myParam As String) 'открытые члены - с заглавных
    _myVar = myParam 'параметры и локальные как private, но без _
End Sub
End Class

indent'ы - 4 пробела.

Автор: dm9 18.12.2005, 23:26
K&R всегда.

Именование переменных, столбцов в БД, атрибутов в XML - camelStyle.
Именование ф-ций, методов и классов - PascalStyle.
Названия файлов - только строчные буквы.
В PHP4 приватные методы начинаю с подчёркивания, так как в этом языке нет другого способа выразить приватность. В нормальных языках это считаю излишним.

Автор: chipset 20.2.2006, 02:29
K&R
Именование методов: unix_style.
Именование классов: unix_style.
Именование переменных: unix_style.
Именование всего остального: unix_style.
Для приватных переменных ставлю "_" впереди.
Классы отделяю друг от друга /*---class foo----*/'ом, между методами ставлю
Код

/////////////////////////////////////////////////////////////////////////////////////////////////////////
///Method A, does bla-bla-bla-bla
/////////////////////////////////////////////////////////////////////////////////////////////////////////


Автор: DeadSoul 20.2.2006, 23:44
Цитата(chipset @ 20.2.2006, 02:29 Найти цитируемый пост)
Для приватных переменных ставлю "_" впереди.

Вроде такое не рекомендуется. Переменные с такими именами reserved для чего-то внутреннего разработчиков компиляторов\библиотек

Автор: chipset 20.2.2006, 23:52
Сцылко в студию.

Автор: dm9 21.2.2006, 12:16
Цитата(DeadSoul @ 21.2.2006, 00:44 Найти цитируемый пост)
Переменные с такими именами reserved для чего-то внутреннего разработчиков компиляторов\библиотек


"для чего-то внутреннего" как раз и есть "приватные переменные и методы".

Автор: JackYF 16.10.2006, 16:59
Использую, как только что выяснилось (  smile ) BSD/Allman.
Хотя довольно нравится и GNU style.

Автор: Xenon 18.10.2006, 22:54
BSD/Allman style

Ненавижу, когда люди за счет экономии одной строки гробят читаемость smile Я никак не могу понять знака начала блока после названия функции и т.д. Сложно видно где что куда вкладывается. А так по скобке ровно вертикально вниз проехал и понял где цикл/функция и т.д. кончилась

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)