Зачем комментировать имена параметров, а не оставлять их как есть - PullRequest
9 голосов
/ 07 февраля 2012

Иногда я вижу такой код:

LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)

Зачем комментировать имена параметров, а не оставлять их как есть?

Ответы [ 6 ]

12 голосов
/ 07 февраля 2012

Я думаю, что есть / были некоторые компиляторы, которые выдавали предупреждение «аргумент не используется», когда аргументы не использовались.

Особенно в функциях обработчика сообщений, подобных той, которую вы показали, аргументы часто не нужны для выполнения задачи.Таким образом, комментируя аргумент names , вы можете избавиться от предупреждений.

С другой стороны, если вы позже захотите использовать некоторые аргументы, полезно иметь именапод рукой, поэтому комментировать проще, чем просто удалить имена.

9 голосов
/ 07 февраля 2012

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

Я буду использовать другой пример:

class A
{
public:
   virtual void foo(int someProperty);
};

class B : public A
{
public:
   virtual void foo(int /*someProperty*/);
};

Скажем, вы хотите это для конкретногослучай, когда вы хотите B::foo() сделать что-то еще, а затем вызвать A::foo() с параметром 0.Вы должны сохранить ту же сигнатуру функции, чтобы полиморфизм работал, но внутри B::foo() вы фактически не используете параметр.И вы не хотите использовать его в будущем.По сути, это заявление о намерениях: "логика этого метода не должна зависеть от someProperty" .

B::foo(int/*someProperty*/)
{
    //do some stuff
    A::foo(0);
}

С закомментированным именем параметра вы не сможете его использовать.(если только вы не приступите к взлому ).Но закомментированное имя говорит вам кое-что о параметре, который вы передаете A::foo() - его 'someProperty' из A.

Теперь я не согласен с синтаксисом, но это может быть возможным объяснением.

3 голосов
/ 07 февраля 2012

Если параметры действительно не нужны, их не нужно называть

Если вы не назовете их, на первый взгляд вы, возможно, не поймете, почему они там вообще.

Если вы назовете их, некоторые компиляторы будут предупреждать вас о неиспользуемых параметрах.

Оставить имена в качестве комментариев - это золотая середина между двумя подходами.

2 голосов
/ 07 февраля 2012

Если это начало определения onPaint() Я видел закомментированные имена аргументов, используемые для избежания "unreferenced formal parameter" предупреждений компилятора (эти предупреждения будут появляться только на высоком уровне предупреждения, уровне -W4 для компиляторов Microsoft) .

0 голосов
/ 07 февраля 2012

Некоторые компиляторы не выдают «предупреждение о неиспользованном аргументе», когда вы комментируете аргумент или не предоставляете его в первую очередь. Но, конечно, вам нужно оставить тип, чтобы иметь правильную подпись.

0 голосов
/ 07 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...