티스토리 뷰

목차

    반응형

    MFC 표준 코딩 규칙 (가이드 3개, F1, 옵션, ASSERT 매크로)


    코드 프로젝트에 올라온 MFC 표준 코딩 규칙(코딩 가이드)입니다. 어떤 인도분이 예전에 올려주신 글인데, 어차피 MFC는 업데이트 멈춰서 예전 글 봐도 상관없습니다.


    1. 확실치 않거나 애매할 땐 F1을 눌러 문서를 확인하세요


    F1으로 도움말 확인[MFC 표준 코딩 규칙] F1으로 도움말 확인


    2. 지금 사용하는 비주얼 스튜디오 프로젝트의 옵션을 이렇게 바꾸세요


    아래 그림은 Visual Studio 2010 한글판 기준

    C++ - General


    Warning level - Level 4 (All builds).

     - 컴파일 시, 단 하나의 경고 메세지도 없어야 합니다


    Detect 64-portability issues – Yes (All builds)


    Detect 64-portability issues – Yes (All builds)[MFC 표준 코딩 규칙] Detect 64-portability issues – Yes (All builds)


    C++ - Code generation


    Smaller type check – Yes (Debug builds only)

    - Helps detect constructs in which there is data loss. Works during run time.


    Basic runtime checks – Both (Debug builds only)

    - Helps avoid buffer overruns and uninitialized parameters. Works during run time.


    Buffer security check - Yes (Release builds only)

    - Helps avoid buffer overruns.


    Runtime library - Multithreaded Debug DLL (Debug), Multithreaded DLL (Release)

    - Compilation is faster and code is shared.


    Runtime library - Multithreaded Debug DLL (Debug) Multithreaded DLL (Release)[MFC 표준 코딩 규칙] Runtime library - Multithreaded Debug DLL (Debug) Multithreaded DLL (Release)


    C++ - Language


    Treat wchar_t as built-in type (All builds)

    - ISO C++ conformance (default in VS2005)

    Force conformance in for loop scope - Yes (All builds)

    - ISO C++ conformance (default in VS2005)


    Force conformance in for loop scope - Yes (All builds)[MFC 표준 코딩 규칙] Force conformance in for loop scope - Yes (All builds)


    경고 수준을 Level 4로 올릴 경우 더 많은 경고 메세지가 뜨겠지만 아래의 방법으로 이를 해결할 수 있습니다.


    1. 일부 소스 코드 재작성

    2. Casting 사용 - 하지만, 조심히 사용

    3. UNREFERENCED_PARAMETER 매크로와 변수를 주석처리 (또는, 삭제)

    4. #pragma를 사용

    - 작은 범위에만 사용해야지, 모든 파일에 적용하면 안 됩니다.

    - 수정한 뒤엔 #pragma를 삭제하세요.


    UNREFERENCED_PARAMETER 매크로와 변수를 주석처리[MFC 표준 코딩 규칙] UNREFERENCED_PARAMETER 매크로와 변수를 주석처리


    수정한 뒤엔 #pragma를 삭제[MFC 표준 코딩 규칙] 수정한 뒤엔 #pragma를 삭제


    ASSERT 매크로를 사용하세요


    _ASSERTE, ASSERT (MFC/ATL), assert (standard C++)


    개발자 입장에선 생각지도 않은 지점에서 에러가 종종 발생합니다. 그렇지만 개발 과정에선 추측만으로 코딩을 하지 않고, 정확하게 진행해야 합니다.

    이때 유용한 ASSERT는 다양한 결과를 알려주며, 주로 사용하는 방법은 아래와 같습니다.


    1
    2
    _ASSERTE(!"Some text to display");
    _ASSERTE(false); 또는, ASSERTE(0);
    cs


    ASSERT 매크로를 사용1ASSERT 매크로를 사용1


    ASSERT 매크로를 사용2ASSERT 매크로를 사용2


    ASSERT 매크로를 사용3[MFC 표준 코딩 규칙] ASSERT 매크로를 사용3


    실제로 ASSERT가 구동될 때 아래 그림처럼 경고창이 생성됩니다.


    MFC Assert 경고창[MFC 표준 코딩 규칙] MFC Assert 경고창


    중지(Abort), 다시 시도(Retry), 무시(Ignore) 중 하나를 선택할 수 있습니다.

    중지를 하면 바로 프로세스가 종료되니 다시 시도를 눌러 호출 스택, 변수 확인 등으로 잘못된 지점을 찾을 수 있습니다. 무시를 누르면 해당 지점은 점프가 됩니다. 그렇지만, 이 매크로는 디버그의 빌드 모드에서만 구동시켜야 합니다.


    아래는 잘못된 예입니다.


    ASSERT 매크로 잘못된 사용 예 1ASSERT 매크로 잘못된 사용 예 1


    ASSERT 매크로 잘못된 사용 예 2[MFC 표준 코딩 규칙] ASSERT 매크로 잘못된 사용 예 2


    참고로, 모든 C++ 함수, [] 삽입 했을 때, = operators, 생성자, 복사 생성자들에 ASSERT를 별도로 선언하지 않아도 경고 창이 뜰 수 있음을 기억하세요.


    출처 - CodeProject - MFC Windows Coding Guidelines [링크]

    MFC 표준 코딩 규칙 (가이드 3개, F1, 옵션, ASSERT 매크로)

    반응형