Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C/C++ Style, делимся опытом 
:(
    Опции темы
GrayCardinal
Дата 2.7.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Lazin
Любой уважающий себя редактор подсвечивает конец блока....


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 2.7.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(Lazin @  2.7.2009,  14:17 Найти цитируемый пост)
мне первый вариант как-то глаза мозолит..

Установите табуляцию 2-3 и блок будет выделяться.
Цитата(nerezus @  2.7.2009,  14:26 Найти цитируемый пост)
 По моему мнению, это плохой код.
Его надо разбить на классы по ~200 строк максимум для улучшения читаемости.

Это ты плохой smile 
Какие классы?!!! Это С !


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 2.7.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 1
Всего: 154



Цитата(andrew_121 @  2.7.2009,  18:57 Найти цитируемый пост)
Установите табуляцию 2-3 и блок будет выделяться.

табуляция в 2-3 пробела? что там будет выделяться кроме попытки выделяться? smile 
PM MAIL Skype GTalk   Вверх
nerezus
Дата 2.7.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



Цитата

Если каждый файл там разбивать на мелкие по 200 строк, то файловая система умрет при распаковке.
 О да, пусть будет на 2 минуты быстрее у юзверей распаковываться, чем читаться нормально.

Цитата

Оно написано на Си. В Си нет классов
 Т.е. ты сам признал, что код на C плохо читаем?) Просто помню, ты о C++ говорил, что это лишь синтаксический сахар ;)

Цитата

там таких проблем нет, потому-что нет скобок xD

"{" == ":"
"}" == ""(пусто)
т.е. код такой же, как в питоне, если считать скобки пустым местом, а смотреть лишь на строки.


Код

if (first) {
    foo(first);
    if (second) {
        int a = 42;
        bar(a);
    }
    printf("done!!!");
}


Код

if (first):
    foo(first);
    if (second):
        int a = 42;
        bar(a);

    printf("done!!!");
}

Сравни ) P.S. синтаксис не приводил )
Мне второй вариант больше нравится - он компактнее, а на скобки никогда внимания не обращаю, смотрю лишь на реализуемые отступы.
Если же при { будет пустая строка, то кажется, как будто блок закончен, что не так )




--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
andrew_121
Дата 2.7.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(Lazin @  2.7.2009,  20:37 Найти цитируемый пост)
что там будет выделяться кроме попытки выделяться?

Прикольная фраза получилась smile 


nerezus, Ты случаем не мусар? Помнишь что Лазин когда-то где-то писал, и за мной следишь? Неа, скорее ты извращенец. smile 


Цитата(nerezus @  2.7.2009,  20:45 Найти цитируемый пост)
Т.е. ты сам признал, что код на C плохо читаем?)

Да еще и зануда.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 3.7.2009, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



GrayCardinal
не, я про одну функции calc_delta_mine ;)

по сабжу мой выбор linux/Documentation/CodingStyle
по работе так
Код

typedef struct some_struct
{
    //
    int variable_1;
    //
    void (*super_callback_2)(int argument_1);
}
t_some_struct;
...
static void private_module_function_1(int argument_1, t_some_struct *argument_2)
{
    int i;
    
    for (i = 0; i < 10; ++i)
    {
        printf("%d\n", i);
    }

     if (i == 10)
     {
         ++i;    
     }
}
...
int public_module_function_1()
{
    private_module_function_1(0, NULL);

    {
        t_some_struct local_variable_1;
 
        private_module_function_1(1, &local_variable_1);
    }
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
proc_maker
Дата 17.8.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



embedded С++. Мы руководствуемся MISRA - очень грамотная вещь.

Из такого что быстро приходит на ум - запрещено использование табуляторов - пробелы. Комменты в стиле doxygen.

Запрещено использование STL и эксепшнов, единый выход из функции, лимит на глубину колво скопов в функции, лимит на длину строки кода, запрет continue, оператора запятая. Нет пробела между именем функции и открывающей скобкой при вызове. Нет пробелов перед запятыми и точками, точками с запятой. Запрещены куски заремаренного кода (золотое с моей точки зрения правило). Один класс - cpp + hpp файл.

Я лично предпочитаю стиль
if (X)
{
   f();
} else
{
   f();
}

Кажется более интуитивно понятным

Это сообщение отредактировал(а) proc_maker - 18.8.2010, 16:42
PM MAIL ICQ Skype   Вверх
Rad87
Дата 18.8.2010, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Ну у вас и жесткий кодестайл.....  больше всего вопросов к единому выходу из функции и к continue.
Как вы работаете с этими ограничениями?  на мой взгляд от этого только усложняется код.
PM MAIL   Вверх
A5uKa
  Дата 18.8.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Странная тема ... ну вот как я оформляю... (у меня очень мало комментариев)

Код

                for (int i=7; i<=temp.Length(); i++)
                tempN+=temp[i];
                Edit9->Text="Ëèíèÿ "+String(StrToInt(tempN)+1);

                MainTree->Select(MainTree->Items->AddChild(MainTree->Selected, Edit9->Text));
                }
                else
                {
                MainTree->Select(MainTree->Items->AddChild(MainTree->Selected, "Ëèíèÿ 1"));
                Edit9->Text="Ëèíèÿ 1";
                }
                }
                else
                {
                MainTree->Select(MainTree->Items->AddChild(MainTree->Selected, "Ëèíèÿ 1"));
                Edit9->Text="Ëèíèÿ 1";
                }
                Edit11->Text="";
                //работает.    //XD

                TCAT->Selected->ImageIndex=27;

                CfgIzmeritel->Close();
                CheckBox5->Checked=true;


Код

NeedToAddFolder=true;
                        }
                        else
                        {
                //------------------------------------------------
                //Ищу дочнрнюю папку, которая есть !
                TTreeNode *tempTree = MainTree->Selected;
                for (int i=0;i<tempTree->Count;i++)
                {
                        MainTree->Select(tempTree->Item[i]);

PM   Вверх
proc_maker
Дата 18.8.2010, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



Цитата(Rad87 @  18.8.2010,  13:29 Найти цитируемый пост)
больше всего вопросов к единому выходу из функции и к continue.
Как вы работаете с этими ограничениями?  на мой взгляд от этого только усложняется код. 


Как ни странно, но я для себя понял что единый выход из функции очень удобен и решает много проблем к примеру благодаря такой вот конструкции:

Код

int f()
{
   int res = -1;
   do
   {
     if (true == wrong_1)
     {
         printf();
         break;
     }

     if (true == wrong_2)
     {
         printf();
         break;
     }
...

      // Now we know everithing is fine!!! - Do our work
      ret = 0;
   } while (0);

   return ret;
}


continue тоже лечится таким же образом:

Код

for ()
{
   do
   {
      // Do something

      if (true == needContinue)
      {
            break;
      }
   } while(0);
}


Как в половой жизни - раз приучил себя не писать как попало - и дальше не имеешь лишней головной боли разного рода.

Добавлено через 8 минут и 24 секунды
Цитата(A5uKa @  18.8.2010,  14:03 Найти цитируемый пост)
for (int i=0;i<tempTree->Count;i++)


мы пишем так:

for (int i = 0; tempTree->Count > i; ++i)

А еще у нас скобки обязаны быть во всех if while case etc.
if ()
{
   a = 0;
}

Это сообщение отредактировал(а) proc_maker - 18.8.2010, 14:19
PM MAIL ICQ Skype   Вверх
A5uKa
Дата 18.8.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Цитата

мы пишем так

Ну один знакомый у меня скобки ставит вообще просто так, что бы выделить что-то ... 
Если пишешь код в одиночестве главное там потом не запутаться ... 
Ну в моём случае это неосуществимо  smile 
PM   Вверх
Dem_max
Дата 19.8.2010, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: нет
Всего: 39



Код

for ()
{
   do
   {
      // Do something

      if (true == needContinue)
      {
            break;
      }
   } while(0);
}


а потом ищешь где у тебя функция зависла и за того что стоит бесконечный цикл.

А какое отношение к оператору  goto ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
proc_maker
Дата 19.8.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



>> а потом ищешь где у тебя функция зависла и за того что стоит бесконечный цикл.
А где тут бесконечный цикл кстати? smile

Цитата(Dem_max @  19.8.2010,  09:14 Найти цитируемый пост)
А какое отношение к оператору  goto ? 


Запрещено.

Я никого не уговариаю на эту конструкцию, поймите. Лично я нашел в ней больше плюсов чем минусов, поэтому стараюсь ее применять везде где возможно, потому что она с моей точки зрения максимально красиво реализует подход: если мы на этой строке значит все проверки прошли успешно.

Это сообщение отредактировал(а) proc_maker - 19.8.2010, 10:17
PM MAIL ICQ Skype   Вверх
Dem_max
Дата 19.8.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: нет
Всего: 39



а что за конструкция такая с while(0); ?

может вместо 
Код

   do
   {
     if (true == wrong_1)
     {
         printf();
         break;
     }

     if (true == wrong_2)
     {
         printf();
         break;
     }
...

      // Now we know everithing is fine!!! - Do our work
      ret = 0;
   } while (0);


проще написать
Код

     if (true == wrong_1)
     {
         printf();
         break;
     }

     if (true == wrong_2)
     {
         printf();
         break;
     }
...

      // Now we know everithing is fine!!! - Do our work
      ret = 0;


Это сообщение отредактировал(а) Dem_max - 19.8.2010, 11:33


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
proc_maker
Дата 19.8.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 11.11.2006

Репутация: 1
Всего: 1



Цитата(Dem_max @ 19.8.2010,  11:28)
а что за конструкция такая с while(0); ?

проще написать
Код

     if (true == wrong_1)
     {
         printf();
         break;
     }

     if (true == wrong_2)
     {
         printf();
         break;
     }
...

      // Now we know everithing is fine!!! - Do our work
      ret = 0;

Да, только чтобы юзать break он должен быть внутри цикла - иначе придется использовать return или goto. Вот while(0) и позволяет это делать не прибегая к циклу как к таковому smile
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1005 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.