문제

면책 조항 : 한동안 C ++를하지 않았습니다 ...

가독성을 향상시키기 위해 C/C ++ 기능/메소드 선언을 장식하는 것이 오늘날 일반적입니까?

조잡한 예 :

void some_function(IN int param1, OUT char **param2);

매크로와 함께 그리고 밖으로 로 정의되었습니다 비어 있는 본문 (예 :이 예에서는 가벼운 문서). 물론 나는 이것이 메소드/함수와 관련된 "Doc Comment Block"과 다소 병렬로 유지된다는 것을 이해합니다.

다른 예제를 제공 할 수 있습니까?이 주제가 커뮤니티에 유용하다고 가정합니다. 제발 위의 예는 바로 그 예입니다.

도움이 되었습니까?

해결책

나는 그런 장식에 감사하지 않을 것입니다.

const와 참조 및 끊임없는 참조를 사용하는 것이 훨씬 낫습니다.

void some_function(AClass const &param1, AnotherClass &param2)

일반적으로 int는 참조가 아닌 값으로 전달되므로 예제에 aclass와 다른 클래스를 사용했습니다. empy를 넣고 아웃하는 것이 산만해질 것 같습니다.

다른 팁

Windows 헤더는 실제로 정확하게 수행합니다. 보다 헤더 주석 사용 된 주석의 전체 목록. 예를 들어"

DWORD
WINAPI
GetModuleFileName(
    __in_opt HMODULE hModule,
    __out_ecount_part(nSize, return + 1) LPTSTR lpFilename,
    __in DWORD nSize
    );

이 기능을 위해 hModule 선택적 입력 매개 변수이며 lpFilename 최대를 저장하는 출력 매개 변수입니다 nSize 문자 요소 및 이는 리턴시 IT에 +1 문자 요소를 포함하는 (기능의 반환 값)를 포함합니다. nSize 입력 매개 변수입니다.

문서화 목적으로 잘 작성된 댓글 블록이 충분하므로 어떤 목적도 사용하지 않습니다. 또한 일부 문서 주석 구문 분석기에는 그러한 일에 대한 특별한 구문이 있습니다. 예를 들어, doxygen이 주어지면 다음을 쓸 수 있습니다.

/**
 * @param[in]  param1 ...
 * @param[out] param2 ...
 **/
void some_function(int param1, char **param2);

나는 이것이 나쁜 생각이라고 생각합니다. 특히 누군가가 와서 매크로를 들어 올려 정의 할 수 있기 때문에 큰 어려움을 겪을 수 있기 때문입니다.

실제로 문서화하려면 댓글을 넣습니다.

void some_function(/* IN */ int param1, /* OUT */ char **param2);

또한 반환 값이 제대로 작동하는시기를 사용하는 이유
또한 나는 나의 의도를 나타 내기 위해 Pass By Ref와 Const Ref를 사용하는 것을 선호합니다. 또한 컴파일러는 이제 코드가 올바른 경우 의도에 대해 상대적으로 우수한 최적화를합니다.

void some_function(/* IN */ int const& param1, /* OUT */ char*& param2);
// OK for int const& is kind of silly but other types may be usefull.

C ++가 아닌 C 프로그래밍을 전문적으로 수행하지 않았지만 적어도 C ++에서 매개 변수의 유형은 자명합니다.

void f( std::string const & ); // input parameter
void f( std::string );         // input parameter again (by value)
void f( std::string& );        // in/out parameter
std::string f();               // output

매개 변수에 컨텍스트를 추가하는 코드 인 코드 문서 도구 (Doxygen)와 함께 (함수에 의해 예상되거나 허용되지 않는 값, 함수가 객체에서 전달 된 방법을 어떻게 변경하는지 ...

포인터에 대해 : 우리는 방법 인터페이스에서 원시 포인터를 제한하는 경향이 있습니다. 필요할 때 사용될 수 있지만 일반적으로 스마트 포인터를 선호해야합니다. 그런 다음, 소유권 의미론은 Smart Pointer : Shared_ptr <> 희석 된 공유 책임 (또는 필요할 때)의 선택에서 비롯됩니다. 단일 소유권 (일반적으로 공장, 현지인 또는 회원 속성의 반품 가치)에 대한 Auto_ptr </고유 <>. ..

나는 사용하려고 노력한다 :

  • 입력 매개 변수 또는 참조가 큰 경우 참조 값
  • 아웃 매개 변수에 대한 참조
  • 호출 된 함수에 대한 소유권을 제공하는 포인터

대부분의 시간은 어떤 매개 변수인지 또는 아웃 매개 변수를 쉽게 알기가 쉽습니다. 물론 선언의 적절한 이름은 좋은 문서입니다.

나는 그것들이 아웃 슨이 짜증나는 것을 발견했다.

나는 이것을 보았지만, 그것이 "공통"이라고 말할 것이라고 생각하지 않습니다.

Win32 API (C ++가 아님)는 비슷한 것을 사용합니다.

WINADVAPI
BOOL
WINAPI
CreateProcessWithLogonW(
    __in        LPCWSTR lpUsername,
    __in_opt    LPCWSTR lpDomain,
    __in        LPCWSTR lpPassword,
    __in        DWORD dwLogonFlags,
    __in_opt    LPCWSTR lpApplicationName,
    __inout_opt LPWSTR lpCommandLine,
    __in        DWORD dwCreationFlags,
    __in_opt    LPVOID lpEnvironment,
    __in_opt    LPCWSTR lpCurrentDirectory,
    __in        LPSTARTUPINFOW lpStartupInfo,
    __out       LPPROCESS_INFORMATION lpProcessInformation
      );

Visual C ++ 2005 및 이후 컴파일러의 경우 실제로는 다음과 같은 선언에 매핑됩니다. __$allowed_on_parameter 컴파일 시간에 확인됩니다.

Pascal Dev가 작성한 C 프로그램에서 오래 전에 볼 수있었습니다.


#define begin {
#define end   }

int main( int argc, char* argv[] )
begin
  ...
end

나는 전에 이것을 보지 못했다. 나는 이와 같은 정보를 의견에 넣는 것이 더 좋을 것이라고 생각합니다.

매개 변수 유형의 정보 외에 접두사 I_, O_, IO_ 사용을 보았습니다.

void some_function(int i_param1, char** o_param2, int& io_param3);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top