티스토리 뷰
목차
MFC 표준 코딩 규칙 (가이드 3개, F1, 옵션, ASSERT 매크로)
코드 프로젝트에 올라온 MFC 표준 코딩 규칙(코딩 가이드)입니다. 어떤 인도분이 예전에 올려주신 글인데, 어차피 MFC는 업데이트 멈춰서 예전 글 봐도 상관없습니다.
1. 확실치 않거나 애매할 땐 F1을 눌러 문서를 확인하세요
[MFC 표준 코딩 규칙] F1으로 도움말 확인
2. 지금 사용하는 비주얼 스튜디오 프로젝트의 옵션을 이렇게 바꾸세요
아래 그림은 Visual Studio 2010 한글판 기준
C++ - General
Warning level - Level 4 (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.
[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)
[MFC 표준 코딩 규칙] Force conformance in for loop scope - Yes (All builds)
경고 수준을 Level 4로 올릴 경우 더 많은 경고 메세지가 뜨겠지만 아래의 방법으로 이를 해결할 수 있습니다.
1. 일부 소스 코드 재작성
2. Casting 사용 - 하지만, 조심히 사용
3. UNREFERENCED_PARAMETER 매크로와 변수를 주석처리 (또는, 삭제)
4. #pragma를 사용
- 작은 범위에만 사용해야지, 모든 파일에 적용하면 안 됩니다.
- 수정한 뒤엔 #pragma를 삭제하세요.
[MFC 표준 코딩 규칙] UNREFERENCED_PARAMETER 매크로와 변수를 주석처리
[MFC 표준 코딩 규칙] 수정한 뒤엔 #pragma를 삭제
ASSERT 매크로를 사용하세요
_ASSERTE, ASSERT (MFC/ATL), assert (standard C++)
개발자 입장에선 생각지도 않은 지점에서 에러가 종종 발생합니다. 그렇지만 개발 과정에선 추측만으로 코딩을 하지 않고, 정확하게 진행해야 합니다.
이때 유용한 ASSERT는 다양한 결과를 알려주며, 주로 사용하는 방법은 아래와 같습니다.
1 2 | _ASSERTE(!"Some text to display"); _ASSERTE(false); 또는, ASSERTE(0); | cs |
ASSERT 매크로를 사용1
ASSERT 매크로를 사용2
[MFC 표준 코딩 규칙] ASSERT 매크로를 사용3
실제로 ASSERT가 구동될 때 아래 그림처럼 경고창이 생성됩니다.
[MFC 표준 코딩 규칙] MFC Assert 경고창
중지(Abort), 다시 시도(Retry), 무시(Ignore) 중 하나를 선택할 수 있습니다.
중지를 하면 바로 프로세스가 종료되니 다시 시도를 눌러 호출 스택, 변수 확인 등으로 잘못된 지점을 찾을 수 있습니다. 무시를 누르면 해당 지점은 점프가 됩니다. 그렇지만, 이 매크로는 디버그의 빌드 모드에서만 구동시켜야 합니다.
아래는 잘못된 예입니다.
ASSERT 매크로 잘못된 사용 예 1
[MFC 표준 코딩 규칙] ASSERT 매크로 잘못된 사용 예 2
참고로, 모든 C++ 함수, [] 삽입 했을 때, = operators, 생성자, 복사 생성자들에 ASSERT를 별도로 선언하지 않아도 경고 창이 뜰 수 있음을 기억하세요.
출처 - CodeProject - MFC Windows Coding Guidelines [링크]
MFC 표준 코딩 규칙 (가이드 3개, F1, 옵션, ASSERT 매크로)