본문 바로가기
C++ 200제/코딩 IT 정보

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

by vicddory 2018. 4. 9.

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 매크로)

댓글