2012-02-07 2 views
5

때때로 나는 다음과 같은 코드를 볼 그대로두고 왜 : 그대로코멘트 매개 변수 이름보다는

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

왜 코멘트 매개 변수 이름보다는 그것을두고?

+1

아마도 코드를 인수 한 사람은 함수 선언에서 매개 변수 이름이 필수는 아니라는 것을 알고 코드를 작성한 사람은이 사실을 알지 못했을 것입니다. 이는 단지 하나의 환경 설정에 불과합니다. –

답변

6

내가 이것을하는 한 가지 이유는 다른 프로그래머에게 매개 변수를 사용하지 말라고 명시 적으로 말하고 의도에 대한 설명을 위해 주석에 남겨두기 때문입니다. 나는 이것이 의미가 없다는 것을 안다 지금, 그러나 위에 읽는. 당신은 몇 가지 여분의 물건을 할 B::foo() 원하는 위치

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

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

이 특정 사건에 대한이 원하는 말, 다음 매개 변수 0A::foo() 전화 :

나는 다른 예를 사용합니다. 동일한 함수 시그니처를 유지해야하므로 다형성이 작동하지만 B::foo() 안에 실제로 매개 변수를 사용하고 있지 않습니다. 앞으로도 사용하고 싶지 않습니다. 이것은 기본적으로 "이 방법의 논리는 someProperty에 종속되어서는 안됩니다"라고 말하는 의도입니다.. (당신이 어떤 hacking에 내려하지 않는 한)

주석 매개 변수 이름으로
B::foo(int/*someProperty*/) 
{ 
    //do some stuff 
    A::foo(0); 
} 

, 당신이 정말로 그것을 사용할 수 없습니다.그러나 주석이 달린 이름은 A::foo()에 전달하는 매개 변수에 대해 알려줍니다. 'someProperty'는 A입니다.

이제 구문에 동의하지 않지만 가능한 설명이 될 수 있습니다.

0

예제에서 호출 된 함수 (예 : OnPaint)가 인수를 사용하지 않으면 인수 이름을 제공하지 않고 컴파일 할 때 사용되지 않는 인수에 대한 경고 메시지가 표시되지 않습니다.

0

일부 컴파일러는 인수를 주석 처리하거나 처음에 제공하지 않을 때 "사용되지 않은 인수 경고"를 발행하지 않습니다. 물론 올바른 서명이 있도록 유형을 남겨 두어야합니다.

3

매개 변수가 정말 필요하지 않은 경우, 당신은 그들에게 처음부터 거기에 왜 당신이 이해하지 않을 수 있습니다 첫눈에

당신이 그들을 이름없는 경우

를, 이름을 할 필요가 없습니다.

이름을 지정하면 일부 컴파일러에서 사용하지 않은 매개 변수에 대해 경고합니다.

이름을 주석으로 남기는 것이 두 가지 접근 방법의 중간에 있습니다. 그게 내가 "unreferenced formal parameter" 컴파일러 경고를 방지하는 데 사용되는 인수 이름을 주석 본 onPaint()의 정의의 시작 인 경우

2

(이러한 경고는 높은 경고 수준에서 마이크로 소프트 컴파일러 수준 -W4 나타납니다).

10

인수가 사용되지 않았을 때 '사용되지 않은 인수'경고를 발행 한 일부 컴파일러가 있다고 생각합니다.

특히 사용자가 보여준 것과 같은 메시지 처리기 기능에서 인수는 종종 작업을 수행하는 데 필요하지 않습니다. 따라서 인수 이름으로 주석 처리하면 경고를 제거 할 수 있습니다.

다른 한편으로는, 나중에 인수의 일부를 사용하고 싶다면, 이름을 가진 것이 유용하기 때문에, 주석 처리는 이름을 삭제하는 것보다 쉽습니다.

+0

컴파일러는/w4로 설정하면 여전히 경고를 생성합니다. – Stefan

+0

확인. 잘 모르겠습니다. 최근 C++ 프로젝트에서 항상 내 모든 주장을 사용했다. :) – MartinStettner