Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 1 из 31  2  3  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Такая немного странная тема. Охота узнать, кто какой стайлинг кода предпочитает при программировании. Будем говорить о С и С++ раздельно. Где ставить скобочки, как писать комментарии. В общем почему именно так, почему так удобнее и т.д.
ну кратко свой
Код:
class CMyClass {
public:
        int PublicVar;

        CMyClass();
private:
        int privateVar;

        void privateMetod();
}

//comment
void f()
{
      int a;
      if(0 == a) {
            a++;
      } else {
            a--;
      }

      int b;
      switch(b) {                                      //comment
      case 1:
            a--;
            break;
      }
                                                            //comment     
}



Каково ваше отношение к венгерской нотации. Способы названия переменных, регистры и т.д.

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо



Партнер
 

Member
Статус: Не в сети
Регистрация: 04.06.2005
Откуда: Оксфордшир
Тут у тебя непоследовательность. У класса скобка начинается но той же строчке, у функции на следующей... то комментарии в начале, то с краю...
Офф: Рано или поздно кто-нибудь все равно поднимет эту тему, так что лучше я сам - Python и нет проблем. Код сам по себе получается красивый. И короткий.

_________________
Таких людей уже нет, а скоро совсем не будет
BTEAM_Shifty


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Хм. Питон конечно хорошо, но не все на нем можно решить

А про скобки. Дело в том, что если строка начиняется с ключевого слова - ожидание скобки логично
а если нет - то лучше дополнительно на том же уровне вложения показать это

а функция обычно объявляется не с ключевого слова (тама его вообще может не быть)

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
ага, мы уже тут :)
Просто приведу кусок кода из текущего проекта:
Код:
void _usart_rx_ISR(void){
        _BIC_SR(GIE); // запрещаем прерывания
        b = U0RXBUF;
        if(p.c == 0){ // начало принятия пакета
                if(b == STARTBIT){
                        RESET_count;
                        paket[0] = STARTBIT;
                        p.c = 1;
                }
        }else{
                if(p.c == 7){
                        if(b == STOPBIT){
                                // проверим КС
                                if(_CRC8){
                                        p.c = 0;
                                        PACKET_READY;
                                        ME1 &= ~(URXE0); // отключаем ресивер
                                        _BIS_SR(GIE); // разрешаем прерывания
                                        return;
                                }
                        }
                }
                if(p.c == MAX_PACKETSIZE-1){
                        if(b == STOPBIT){
                                if(_CRC24()){
                                        p.c = 0;
                                        PACKET_READY;
                                        ME1 &= ~(URXE0); // отключаем ресивер
                                }else p.c = 0;
                        }else p.c = 0;
                }else{
                        paket[p.c++] = b;
                        RESET_count;
                }
        }
        _BIS_SR(GIE); // разрешаем прерывания
}

Собственно кавычки ставлю всегда так(везде :) ). Коментарии чаще всего в том виде что на примере или непосредственно над блоком если длинные или многострочные.
nickyoz писал(а):
Да и зачем место экономить

Это насчёт скобок: наверное я не правильно выразился. Я имел ввиду рабочее, видимое пространство. Ни на работе ни дома я не имею возможности лицезреть на 24" в разрешении 1600х1200(и больше) поэтому борюсь за каждый видимый пиксель на экране, т.е. чем болше видишь за раз тем понятнее.В расход обычно идёт всё: темы, тулбары и всё остальное что может мешать.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
Возможно у меня извращенный вкус, но по жизни пользую таб на 2 пробела (вместо 4х).
{ в конце строчки на яве, на новой строчке - C++\C#.
else везде на новой строчке
Было время, когда имена полей начинал с подчеркивания, имена параметров метода с буквы a. Сейчас забил.


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Гм. :D
Код:
#define SECTOR_SIZE      512


enum ErrorType
{
    Err_OK,
    Err_Fail
};


//////////////////////////////////////////////////////////////////////////
// IHardDriveHAL, some comments there
//////////////////////////////////////////////////////////////////////////
class IHardDriveHAL   // abstract
{
public:
    bool    read_sector( void *buffer ) = 0;                    // comments
    bool    write_sector( void *buffer ) = 0;                   // comments
};


//////////////////////////////////////////////////////////////////////////
// FlashHAL, some comments there
//////////////////////////////////////////////////////////////////////////
class FlashHAL : public IHardDriveHAL
{
public:
    bool    read_sector( void *buffer );                        // comments
    bool    write_sector( void *buffer );                       // comments

    //...
};


//////////////////////////////////////////////////////////////////////////
// FlashDrive, some comments there
//////////////////////////////////////////////////////////////////////////
class FlashDrive
{
public:
    FlashDrive();
    ~FlashDrive();

    ErrorType   read_buffer( void *buffer, size_t length );     // comments
    ErrorType   write_buffer( void *buffer, size_t length );    // comments

private:
    IHardDriveHAL *_hal;
};




// Это уже в .cpp

//////////////////////////////////////////////////////////////////////////
// FlashDrive implementation
//////////////////////////////////////////////////////////////////////////

FlashDrive::FlashDrive()
    : _hal( NULL )
{
    _hal = new FlashHAL();
    // ...
}


// read_buffer, some comments there
ErrorType FlashDrive::read_buffer( void *buffer, size_t length )
{
    unsigned char buf[SECTOR_SIZE];
    unsigned char *user_buf = reinterpret_cast<unsigned char*>( buffer );

    for ( size_t read_len = 0; read_len < length; read_len += SECTOR_SIZE )
    {
        if ( length - read_len >= SECTOR_SIZE )
        {
            if ( !_hal->read_sector( user_buf ) )       // comments
                return Err_Fail;
            user_buf += SECTOR_SIZE;                    // comments
        }
        else
        {
            if ( !_hal->read_sector( buf ) )
                return Err_Fail;
            memcpy( user_buf, buf, length - read_len );
        }
    }
}


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
mein Ну это дело привычки - скобка
а количество кода большое видеть. А зачем?
вообще у нас считается что если функция больше 30 строк - то она плохая
Добавлено спустя 1 минуту, 55 секунд
Билли Бонс Класс. Мешанина подхода С и С++
А вот твою растоновку скобок когда-то давно пропогандировало MS

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Catar писал(а):
Возможно у меня извращенный вкус, но по жизни пользую таб на 2 пробела (вместо 4х).

маловато как-то два пробела, да и стандартный TAB обычно имеет их 8 штук(обычно и использую). Хотя 4 уже нормально смотрится.
nickyoz писал(а):
а количество кода большое видеть. А зачем?вообще у нас считается что если функция больше 30 строк - то она плохая

Вот теперь я понял о чём речь. К сожалению, частенько получаются функции поразмашистее - ну не всегда можно коротко и эффективно/наглядно развернуть алгоритм.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
mein писал(а):
маловато как-то два пробела

не люблю когда код вылезает за экран...


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
nickyoz писал(а):
Мешанина подхода С и С++
Где? :spy: Если ты про void*, то иначе никак - буфер-то может быть любого типа.


 

Member
Статус: Не в сети
Регистрация: 28.03.2006
Alecmg писал(а):
Тут у тебя непоследовательность. У класса скобка начинается но той же строчке, у функции на следующей..

Между прочим это хороший коммерческий стандарт.
mein
Хороший код, но лучше (имхо опять же, но опять же хороший коммерческий стандарт) } else { и if( x == .. ) (пробелы)
nickyoz писал(а):
вообще у нас считается что если функция больше 30 строк - то она плохая

да и правильно. но исключения есть всегда.

_________________
Первый огонь был получен людьми из-за перегрева.
Пессимист отличается от оптимиста датой наступления конца света.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
nickyoz не вижу никакой мешанины, даже каст С++шный. У меня код похож на код Билли, но оступов делаю по меньше:
Код:

IOReturn PLX9080::plxOpenDevice(PLX9080::CallbackWOReturn init, PLX9080::CallbackWOReturn start, UInt32 data_addr,
                           UInt32 flags, bool complete)
{
   DbgPrint("PLX9080::plxOpenDevice(), users %d\n", masterIface_.users);
   if (masterIface_.users == 0)   //first called
   {
      set_bit(0, &masterIface_.dma_done);
      //Creating DMA struct
      masterIface_.dma = PLXDMAEngine::plxAlloc(data_addr,
                        masterIface_.buffers,
                        masterIface_.bufsize,
                        (masterIface_.direction == MASTER_DIRECTION_TX) ?
                        PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE,
                        flags/*,
                        complete*/);
      if (!masterIface_.dma)
      {
         return kIOReturnNoMemory;
      }
      //Initialization
      if (init) (this->*init)();
      if (start) (this->*start)();
      
      masterDev_.int_source->enable();
   }
   masterIface_.users++;
   
   return kIOReturnSuccess;
}

IOReturn PLX9080::plxRelease(PLX9080::CallbackWOReturn stop, PLX9080::CallbackWOReturn exit)
{
   DbgPrint("PLX9080::plxRelease(), users %d\n", masterIface_.users);
   if (masterIface_.users == 1)
   {
      masterDev_.int_source->disable();
      if (stop) (this->*stop)();
      if (exit) (this->*exit)();
      //Destroying DMA
      PLXDMAEngine::plxFree(masterIface_.dma);
   }
   masterIface_.users--;
   return kIOReturnSuccess;
}


Писать предпочитаю, как рекомендует Саттер:
Имя типа LikeThis
Инстанс likeThis
Поле likeThis_
Добавлено спустя 2 минуты, 16 секунд
А еще я не люблю стаил, как у mein:D

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Daemon писал(а):
Писать предпочитаю, как рекомендует Саттер
Да я тоже так обычно писал, но на работе немного другой стандарт (как выше).


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
Если ты про void*, то иначе никак - буфер-то может быть любого типа.

Смарт-пойнтеры мы не уважаем :lol: А вообще действительно void* - дурной тон.
Цитата:
Хороший код, но лучше (имхо опять же, но опять же хороший коммерческий стандарт) } else { и if( x == .. ) (пробелы)

это чисто религиозные войны.
я лично обычно пишу так
Код:
if (x==y)
{
...
}
else if (x1==y1)
{
...
}
else
{
...
}
//что-то мелкое
if (zcv) fdfds;

переменные в немаленьких программах именую согласно венгерской нотации. Ну, вроде того, что bXXX - переменная типа "bool" (хотя это спорный вопрос ;)), dwXX - dword aka unsigned long int итд

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


Последний раз редактировалось Root 07.12.2006 0:35, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Root писал(а):
Цитата:
Если ты про void*, то иначе никак - буфер-то может быть любого типа.

Смарт-пойнтеры мы не уважаем :lol: А вообще действительно void* - дурной тон.
Не надо делать из меня идиота. :0) Причём здесь смарт-пойнтеры? Дурной, не дурной, а ты попробуй по-другому сделай, а потом уже морализируй. :)
Root писал(а):
переменные в немаленьких программах именую согласно венгерской нотации. Ну, вроде того, что bXXX - переменная типа "bool" (хотя это спорный вопрос ;)), dwXX - dword aka unsigned long int итд
Венгерская нотация маст дай!!! :gun:


Последний раз редактировалось Билли Бонс 07.12.2006 0:37, всего редактировалось 1 раз.

 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Билли Бонс
Цитата:
Не надо делать из меня идиота. :0) Причём здесь смарт-пойнтеры?

альтернативы? да и по-любому брать void*, а потом из него мутить char* через каст смысла, ИМХО, нет - пущай кастует тот, кто передает параметры в функцию.
Цитата:
Венгерская нотация маст дай!!!

это еще почему? очень удобно. в частости когда программишь какую-нибудь девайсину и возюкаешься с кучей разных переменных разных типов.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


Последний раз редактировалось Root 07.12.2006 0:39, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Root писал(а):
альтернативы?
Так причём они здесь? Просвети меня, я не понял.
Root писал(а):
это еще почему? очень удобно. в частости когда программишь какую-нибудь девайсину и возюкаешься с кучей разных переменных разных типов.
Пиши в вижуале и используй ассистанта, и никаких извращений с именами.


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
Пиши в вижуале и используй ассистанта

вижуал - мастдай, ассистант - тем более. GCC, консоль, MAKE и DDK рулят :)
очень забавно приделывать драйверный проект к студии - проще его ручками набрать и забильдить спец. тулзой build :)

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Ну я тоже gcc и make'ом компилирую (да и не под Intel вовсе), но не в блокноте же проги писать. :)
Добавлено спустя 6 минут, 31 секунду
Root писал(а):
да и по-любому брать void*, а потом из него мутить char* через каст смысла, ИМХО, нет - пущай кастует тот, кто передает параметры в функцию.
Вот это самый несуразный подход из всех, нельзя так. Если преобразования не избежать, надо оставлять его на нижнем уровне (в драйвере), а не переносить его в каждый вызов функции на верхнем уровне.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Root писал(а):
Смарт-пойнтеры мы не уважаем
Смартпоинтеры действительно в данном случае левые ;)
А вообще странно, почему буфер в void *, тем более что для этих целей (пересылка данных, буд-то порт, или сеть) зачастую применяется char *. А что если char * - void *, а потом опять char * :D Хотя это вопрос требований, если нужно void * - никуда от этого не уйти.

_________________
Ку ку


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 1 из 31  2  3  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan