코딩 팁

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

코딩 기록 vicddory 2018. 4. 9. 11:48

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

반응형
그리드형(광고전용)