LINUX.ORG.RU

C++ коментарии: /* */ против //

 , ,


0

1

Здравствуйте,

На днях заинтересовал вопрос, а какие же комментарии лучше использовать для С++, /* */ или // ?

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

Если комментарий многострочный - то однозначно /* */.
Где-то видел рекомендацию, что // надо ставить только когда помечаешь говнокод, который нужно будет переделать. Потом проходишься по коду и вычищаешь все «//».
Также удобно использовать // для «переключалок» типа:

// a[i] = 1;
a[i] = 0;

AlexCones ★★★ ()
Ответ на: комментарий от arsi

Тимлид у меня на Perl специализируется :)

Вот кстати, пару случаев фейла:

/*
    Ma look, I'm nesting /* multiline */  comments
*/

/*
    std::string hello = "Hello, */ fail!";
*/
KennyMinigun ★★★★★ ()

«Структурирование кода само по себе имеет большое значение. Конкретные соглашения менее важны, чем сам факт, что вы последовательно применяете определенные соглашения. Договоренности по форматированию, соблюдаемые лишь от случая к случаю, могут сильно ухудшить читаемость кода.»
(С) С. Макконнел «Совершенный код».

Книжка настоятельно рекомендуется к прочтению полностью.

trex6 ★★★★★ ()

как прописано в стайлгайде так и делай...

mm3 ★★★ ()

// - для однострочных комментариев, /* */ - для многострочных

das_tier ★★★★★ ()
// single-line comment
/*
 * multiline comment
 * if one line is not enough
 */

Вот так. Некоторые ещё любят добавлять комментарии прямо на строчку с кодом. Тогда так:

ballsize++; // your balls got bigger

CYB3R ★★★★★ ()

Многие среды ставят // автоматически по хоткею, что удобно для комментирования кода. Для аннотаций /* */ хорош возможностью не ограничивать свою мысль одной строкой. Для комментирования или переключения кода вручную используют #if 0 #else #endif, либо такую штуку:

    //* - убираем/добавляем снова один слеш
    int a = 5;
    /*/
    int a = 6;
    //*/

quiet_readonly ★★★★ ()
Ответ на: комментарий от KennyMinigun

> Тимлид у меня на Perl специализируется :)

молодец, чо :)

> Вот кстати, пару случаев фейла

вот поэтому у нас кодеры на с++ для коментов используют //, а для отключения кусков кода — /**/ (для больших кусков или кусков, уже содержащих /**/ — #if 0 ... #endif).

arsi ★★★★★ ()
Ответ на: комментарий от KennyMinigun

> Ну это же вообще костыль

то, что регулярно используется многими разработчиками, костылями считать не принято ;) даже древний kate, например, #if 0 ... #endif подсвечивал как комент, хотя препроцессингу он не обучен. ещё один плюс таких «коментов» — они могут быть вложенными.

arsi ★★★★★ ()
Ответ на: комментарий от AlexCones

Прошу прощения, увлёкся :)
Но видео советую посмотреть.

KennyMinigun ★★★★★ ()
Ответ на: комментарий от DeVliegendeHollander

Кстати это одна из причин моего вопроса. Те же аннотации принято писать и так:

/// \fn someMethod
/// \brief Some description
void SomeClass::someMethod(in someArgument);

KennyMinigun ★★★★★ ()
Ответ на: комментарий от arsi

даже древний kate, например, #if 0 ... #endif подсвечивал как комент

Да оно и сейчас так :)

KennyMinigun ★★★★★ ()
Ответ на: комментарий от KennyMinigun

Вообще мне кажется, что надо придерживаться единого стиля комментариев.

Если работаешь в команде, то стиль определяется корпоративным/командным стандартом/требованиями.

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

Если сам определяешь стиль, то лучше выбрать один стиль и применять его.

Вот такое моё мнение.

PS: #if 0 ... #endif — это совсем даже не костыль. Это нормальный рабочий инструмент. Особенно для C.

DeVliegendeHollander ★★ ()
Ответ на: комментарий от KennyMinigun

use right comments Luke

#if 0
    Ma look, I'm nesting /* multiline */  comments
#endif
shty ★★★★★ ()
Ответ на: комментарий от KennyMinigun

для больших кусков или кусков, уже содержащих /**/ — #if 0 ... #endif

Ну это же вообще костыль

это не костыль, а директива препроцессора

shty ★★★★★ ()

Блин… Было же у Майерса…

KblCb ★★★★★ ()
Ответ на: комментарий от KennyMinigun

Doxygen-то зачем сюда впутывать? Хоть то же самое можно записать и как

/**
 * \fn someMethod
 * \brief Some description
 */
 void SomeClass::someMethod(in someArgument);

annulen ★★★★★ ()
Ответ на: комментарий от DeVliegendeHollander

А кто сказал, что хуже? В виме первый вариант ставится (и уюирается) на раз

annulen ★★★★★ ()
Ответ на: комментарий от AlexCones

Для многострочных переключалок :

    int some;
    /* * /
    some = 1;
    java.lang.System.out.print("multiline.stuff");
    /*/
    some = 2;
    java.lang.System.out.print("other.multiline.stuff");
    //*/

    //убираем один пробел и тыньс!

    int some;
    /* */
    some = 1;
    java.lang.System.out.print("multiline.stuff");
    /*/
    some = 2;
    java.lang.System.out.print("other.multiline.stuff");
    //*/
Deleted ()
Ответ на: комментарий от KennyMinigun

спасибо за «хреначь код (и коменты туда же)»

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

ТСу:

чель кури историю

// из В в который попало из CPL

/* */ из Алгола

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

всё просто.

qulinxao ★★☆ ()

// чтобы было видно в диф файле, что коммент исправил, а не что-то ещё

dimon555 ★★★★★ ()
/* 
 * Когда много пояснительного текста.
 * Очень удобно использовать астериски в начале каждой строки.
 */
anonymous_sapiens ★★★★★ ()

При чём тут Development?

Или ты комплексуешь, что у тебя маленький... скор?

anonymous ()

На си не пишу. Для того на чем пишу использую NERD_commenter - он ставит однострочные, если бы не использовал NERD_commenter, то всеравно бы ставил однострочные, т.к. CTRL-Q. А вообще, как генератор документации требует, так и приходится писать.

special-k ★★★ ()

На днях заинтересовал вопрос, а какие же комментарии лучше использовать для С++, /* */ или // ?

профессор, вы бороду под одеяло или на одеяло кладёте?

ответ прост

//однострочные

/* * * многострочные * */

drBatty ★★ ()
Ответ на: комментарий от DeVliegendeHollander

#if 0 ... #endif — это совсем даже не костыль

да. особенно учитывая его возможность замены на #ifdef DEBUG например.

drBatty ★★ ()
Ответ на: комментарий от KennyMinigun

и как ты по-другому закомментишь, например, такой метод?

void SomeClass::someMethod(int param = /* = 0 */)
{
...
}

#if 0 #endif единственный вменяемый вариант

vvviperrr ★★★★★ ()

Как уже писали выше:

// однострочный комментарий

/* многострочный
   комментарий */

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

Быстрое исключение кода (для себя):

#if 0
    // oneline comment here
    foo();

    /* multiline comment
       there */
    bar();
#else
    // do something else
    baz();
#endif

Подробное исключение кода (для VCS):

#ifdef USE_DECRECATED_SOLUTION
    ...
#else
    ...
#endif

Dendy ★★★★★ ()
Ответ на: комментарий от DeVliegendeHollander

Очевдно же - у меня :) От // в глазах рябит. Особенно когда делают так:

////////////////////////////////////////////////////////////////
//////
// This is a comment
// A multiline one.
/////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

invy ★★★★★ ()
Ответ на: комментарий от invy

Так это без разницы. Например, мне встречалось и такое:

/**************************************************************************/
/**************************************************************************/
/*                                                                        */
/* This is                                                                */
/* myBestFuncion( int a, char b, float c )                                */
/**************************************************************************/
/***************************                   ****************************/
/****                                                                  ****/
/* a - number of characters                                               */
/****                                                                  ****/
/* b - character for multiplex                                            */
/****                                                                  ****/
/* c - f#cking something (abstruse)                                       */
/**************************************************************************/
/**************************************************************************/

От такого не рябит? :)

Тут дело-то не в конкретных символах, обозначающих комментарии, а в том, как их используют.

DeVliegendeHollander ★★ ()

Исключительно //, так как проблемы /* */ всем известны. Единственное исключение для /* */ - это doc string.

Ну и все вменяемые среды умеют комментить // (и убирать комменты) для выделеного текста по хоткею.

А в некоторых языках даже и нет многострочных комментов, например Python (хотя можно конечно использовать тройные кавычки для этого).

anti_social ()
Ответ на: комментарий от DeVliegendeHollander

не выкладывай такое больше. Вообще смотря что комментировать, сам должен быть самодокументированным, это уже говорили? Если длительное описание тогда /* * Cool text here */

Если быстро закомментировать и протестить тогда // - Тогда легче строка за строкой раскомментировать

anonymous ()
Ответ на: комментарий от anonymous

не выкладывай такое больше.

Я и не собирался, но поддался на провокацию. :)

Больше не буду.

DeVliegendeHollander ★★ ()
Ответ на: комментарий от Xenesz

просто насмотрелся на такой кодстайл

Вот и я тоже. До тошноты. Удивляюсь, как людям не лень такой фигнёй заниматься, ведь пустая трата времени же. :)

DeVliegendeHollander ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.