Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
11 / 11 / 2
Регистрация: 17.02.2014
Сообщений: 947

Комментирование программ. Насколько это важно?

08.02.2016, 19:01. Показов 3525. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поделитесь собственным опытом.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2016, 19:01
Ответы с готовыми решениями:

Комментирование программ С++
Помогите с комментариями к программе, пожалуйста, в воскресенье зачет уже Хотя бы основные моменты пояснить

Комментирование программ С++
Пожалуйста, срочно помогите , объясните как работает тут this ... не понимаю зачем он вообще MARSH& MARSH::operator=(MARSH&...

насколько это соответствует стандарту?
#include <iostream> class shit { private: int x; public: shit(){} shit(int p) { x = p; } void set (int*...

55
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.02.2016, 11:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ct0r Посмотреть сообщение
А у кого-то другого doxygen комментарии могут подсвечиваться фигово. Так что не надо на это закладываться
Я просто описал частный случай. Так что ... как вы там сказали..
Цитата Сообщение от ct0r Посмотреть сообщение
не надо на это закладываться
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
09.02.2016, 11:52
avgoor, вы путаете обычные комментарии с документацией в виде комментариев, которые можно специальными утилитами перегнать в HTML/XML документацию, а код очистить от них.
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
09.02.2016, 17:58
ct0r,
Все правильно. Но эти фразы != фразе "никакие комментарии не нужны".
А ткните пальцем, где Вы в моём сообщении такую("никакие комментарии не нужны") фразу нашли? А? В упор не вижу.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
09.02.2016, 18:06
Цитата Сообщение от Melg Посмотреть сообщение
А ткните пальцем, где Вы в моём сообщении такую("никакие комментарии не нужны") фразу нашли? А? В упор не вижу.
Ткни пальцем, где я утверждал, что она там есть.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
09.02.2016, 18:29
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
вы путаете обычные комментарии с документацией в виде комментариев
С обычными комментариями пятна не отстирывались, а с комментариями Ariel...

Если любые комментарии - не часть документации, тогда что?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.02.2016, 18:37
Цитата Сообщение от ct0r Посмотреть сообщение
Кому-то лучше, кому-то нет. А кому-то надо и так, и так. Это все сильно зависит от компании, команды, прочих факторов.
это не зависит ни от чего, кроме здравого смысла:


example freaking comments:
C++
1
2
3
4
5
6
7
// create file
// returns true if success
bool create_file(const char* path);
 
// create file
// returns true if success
bool delete_file(const char* path);

example good comments:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// =========================================================================
 
// --- helper gives the class the ability to output
#ifndef OUT_TO_STREAM
    #define OUT_TO_STREAM(type_)  \
        template<class T>friend   \
        ::std::basic_ostream<T>&  \
        operator<<(::std::basic_ostream<T>& os, const type_& obj )
#endif
 
// =========================================================================
// =========================================================================
// =========================================================================
 
namespace meta{
 
    #define dCONDITIONAL \
        std::is_same<T, U>::value || has_<T, Args...>::value 
    
    // true, if T present in the list of Args
    template <typename... Args>
        struct has_;
    
    template <typename T, typename U, typename... Args>
    struct has_ <T, U, Args...> 
        : std::integral_constant< bool, dCONDITIONAL >
    {};
    
    #undef dCONDITIONAL
 
    template <typename T, typename U>
    struct has_<T, U>  : std::is_same<T, U>
    {};
    
    // will be compiled if 'me_' same 'type_'    
    #define dFOR_(me_ , type_)               \
        typename me_ ,                       \
        typename std::enable_if<             \
            std::is_same<me_ , type_>::value \
        >::type* = nullptr
 
 
    // will be compiled if 'me_' same 'type_', and temporary
    #define dRVALUE(me_ , type_)             \
        typename me_ ,                       \
        typename std::enable_if<             \
            std::is_same<me_ , type_>::value \
            && std::is_rvalue_reference<me_&&>::value  \
        >::type* = nullptr
    
 
    // will be compiled if 'me_' not pressent in the list of types
    #define dNOT_(me_, ...)                         \
        typename me_, typename std::enable_if<      \
            ! meta::has_< me_, __VA_ARGS__ >::value \
        >::type* = nullptr
 
}//namespace meta
 
#if 0
// usage:
 
 
#include <iostream>
 
struct ololo;
struct trololo;
 
struct some
{
    // instance if U - not 'trololo' and not 'ololo'
    template<dNOT_(U, trololo, ololo) > 
    void add(const U& value) 
        { std::cout << "common version: " << value << std::endl; }
 
    // instance if U is 'trololo'
    template<dFOR_(U, trololo) > 
    void add(const U& value) 
        { std::cout << "version for 'trololo': " << value << std::endl; }
 
    // instance if U is 'ololo'
    template<dFOR_(U, ololo) > 
    void add(const U& value) 
        { std::cout << "version for 'ololo': " << value << std::endl; }
    
    
    // instance if U is temporary 'ololo'
    template<dRVALUE(U, ololo) > 
    void add(U&& value) 
        { std::cout << "version for temporary 'ololo': " << value << std::endl; }
};
 
struct trololo 
{
    OUT_TO_STREAM(trololo)
    {
        (void)obj;
        return os << "i am trolololko";
    }
};
 
struct ololo
{
    OUT_TO_STREAM(ololo)
    {
        (void)obj;
        return os << "i am olololko";
    }
};
 
 
int main()
{
    std::cout << "Hello, world!\n";
 
    some s;
    s.add<int>(10);
    s.add<trololo>({});
        
    ololo o;
    s.add<ololo>(o);
    s.add<ololo>({});
}
 
// =========================================================================
// =========================================================================
// =========================================================================
#endif

обратите внимание, код был снабжен примером использования.
по сути - "документация прилагается".
специально, что б средний программист мог пользоваться не вникая.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
09.02.2016, 18:38
Цитата Сообщение от hoggy Посмотреть сообщение
// returns true if success
нормальный коммент - а если другое поведение от логического(создан/не создан)? при int createFile() без комментария вообще не понять, что делать с 0 или -3
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.02.2016, 18:42
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
нормальный коммент
ага. нормальный.
там только "ваш кэп" не хватает
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
09.02.2016, 18:45
hoggy, ну у меня есть такого рода коммент (ниже псевдокод)
C++
1
2
// return true if this method could process this key event, false to forward to next node
bool KeyPressed(int key);
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.02.2016, 18:53
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ну у меня есть такого рода коммент (ниже псевдокод)
имя функции сбивает с толку.
так называют функции, который возвращают "нажата/не нажата"

если назначение функции - обработчик события,
то обычно их называют как то так:

C++
1
2
3
4
5
// пришло время обработать код нажатой клавиши
bool on_pressed(const int key);  
 
// функция вызывается для обработки события "изменение размеров"
bool on_resize(const int x, const int y);
причем, префих 'on_' - это такой стиль кода.
и его использование само по себе избавляет от необходимости
писать комментарии к функции.

потому что при таком стиле,
такие комментарии становятся капитанскими
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
09.02.2016, 18:56
Цитата Сообщение от hoggy Посмотреть сообщение
имя функции сбивает с толку.
так называют функции, который возвращают "нажата/не нажата"
мне аж интересно, что за мега-название было бы у вас при таком требовании в методу:
C++
1
bool ifCanProcessTrueOrFalseForForward
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
09.02.2016, 19:01
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
мне аж интересно, что за мега-название было бы у вас при таком требовании в методу
Тут намёк на то, что должен быть другой подход к реализации.

Не по теме:

И да, hoggy иногда бывает через чур дотошным к деталям.

1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.02.2016, 19:01
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
в методу:
такая метода идет в мусорное ведро.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
09.02.2016, 19:05
Цитата Сообщение от hoggy Посмотреть сообщение
такая метода идет в мусорное ведро.
да вы весь мой код туда суете!
2
09.02.2016, 19:10

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
да вы весь мой код туда суете!
Ничего страшного, он и мой код туда же выкинет :D

0
09.02.2016, 19:15

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
да вы весь мой код туда суете!:cry:
Цитата Сообщение от Croessmah Посмотреть сообщение
Ничего страшного, он и мой код туда же выкинет:D
Мелко плаваете. Он 99% раздела выкинет туда же)

Не по теме:

Хотя по большому счёту я с ним буду согласен.

0
09.02.2016, 19:18

Не по теме:

Что-то навеяло мем:

0
09.02.2016, 19:21

Не по теме:

rikimaru2013, вы уж не обижайтесь, но мне ваши подходы тоже далеко не всегда кажутся правильными)
А мем повесилил)

0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
09.02.2016, 22:03
Цитата Сообщение от hoggy Посмотреть сообщение
это не зависит ни от чего, кроме здравого смысла:
Да, а здравый смысл много от чего зависит. От того, IT-компания или нет, от того, какое руководство, от того, какого размера команда, от того, какой уровень команды, от того, как распределены роли в команде, от того, какие предпочтения у людей в команде, от того, какие техсредства в распоряжении.

Цитата Сообщение от hoggy Посмотреть сообщение
// --- helper gives the class the ability to output
// true, if T present in the list of Args
// will be compiled if 'me_' same 'type_'
// will be compiled if 'me_' same 'type_', and temporary
// will be compiled if 'me_' not pressent in the list of types
И сам же пишешь капитанские комменты. Я, средний программист, за 5 секунд и так все понял.

Цитата Сообщение от hoggy Посмотреть сообщение
// instance if U - not 'trololo' and not 'ololo'
// instance if U is 'trololo'
// instance if U is 'ololo'
// instance if U is temporary 'ololo'
Так может вместо них либо дать нормальные имена макросам, либо вообще избежать их сомнительного использования?

Цитата Сообщение от hoggy Посмотреть сообщение
// ======================================== =================================
В таком тоже не вижу смысла. Оно зачем? И без этого визуально все хорошо видно. Зачем место вертикальное гробить - непонятно. Но если уж так хочется, то нужно использовать редко, чтобы не перестало бросаться в глаза.

Короче, не увидел я пока в этом примере ни одного труЪшнего коммента. И заодно типа не понял, зачем нужен класс some со столькими add'ами, откуда возникла такая необходимость.

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ну у меня есть такого рода коммент (ниже псевдокод)
Ну что, фигово Больше не делай так
0
09.02.2016, 23:22

Не по теме:

ct0r, Тогда какой смысл было использовать противопоставление? Утверждение А. Но, A != утверждение Б - при этом Б ни относится к тому, о чём был мой пост, ни содержится в нём.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2016, 23:22

Насколько важно перезагружать ПК после установки программ?
Помнится, ещё с Windows 95 все айтишники перезагружали комп после установки программы/драйвера. И мне ещё тогда говорили, что так нужно...

Важно: Насколько просядет посещаемость!
Всем привет. Вообщем мне нужны деньги :) . Подскажите, пожалуйста! Имею сайт СДЛ. Тиц 20 PR 4 Планирую продавать с него ссылки по...

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

Насколько важно знание математики в программировании?
хватит ли уровень математике на базе 11 классов чтобы свободно програмировать на php javascript или еще дискретная нужна ?

Насколько важно количество внешних ссылок?
Если проверить мой сайт http://unique-travel.ru/ на сервисе http://www.linkexchanger.ru/tools/link_extractor.php он считает внешними...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru