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

MFC 코딩 가이드 주의점 7개, 꼭 알아보세요

by vicddory 2018. 7. 29.

MFC 코딩 가이드 주의점 7개, 꼭 알아보세요


TYPE은 정확히 사용하세요

BOOL 값을 반환하는 함수는 아래처럼 사용하면 안 됩니다.


1
2
CBitmap bmp;
BOOL result = bmp.LoadBitmap(IDS_BMP

cs


BOOL 값을 반환하는 함수는 아래처럼 사용하면 안됨[MFC 코딩 가이드] BOOL 값을 반환하는 함수는 아래처럼 사용하면 안됨

어떤 경우에도 아래처럼 사용해야 합니다.


1
2
CBitmap bmp;
int result = bmp.LoadBitmap(IDS_BMP);
cs


BOOL 값을 반환하는 함수는 아래처럼 사용[MFC 코딩 가이드] BOOL 값을 반환하는 함수는 아래처럼 사용


아래에 언급된 TYPE들은 특히 중요하게 생각하셔야 합니다.


- 모든 포인터

- HWND

- HANDLE

- HINSTANCE

- UINT_PTR

- SIZE_T , size_t

- DWORD_PTR

- LONG_PTR

- LPARAM

- WPARAM


이런 몇 가지 TYPE들은 컴파일되는 플랫폼 간에 크기에 변화가 있을 수 있습니다. (64비트와 32비트 환경 같은,)


UINT_PRT에서 UINT로 캐스팅하는 것도 위험합니다. 특히, 64비트 환경에선 심각한 오류가 발생합니다.


Casting 지양

형 변환이 필요하다면 C++ 스타일을 따르세요. 정말 필요하다면 말이죠.


1
2
3
4
HCURSOR CDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}
cs


형 변환이 필요하다면 C++ 스타일[MFC 코딩 가이드] 형 변환이 필요하다면 C++ 스타일


정말로 형 변환이 필요하다면 static_cast를 사용하세요.


형 변환을 할 때 static_cast 이외의 것들은 자제하세요.


Magic Number 지양

숫자나 리터럴 문자를 코드에 직접 삽입하지 말고, 0, 1, -1만 사용하세요.


Magic Number 지양[MFC 코딩 가이드] Magic Number 지양

정말로 다른 숫자를 사용해야 한다면, 아래의 예를 따라주세요.


1
2
3
4
5
6
namespace
{
    const int IamSureTabSizeIsNoLongerThanThis = 35;
}
 
CString tab[IamSureTabSizeIsNoLongerThanThis];
cs


상수를 전역으로 사용하진 말고, 클래스 내부나 CPP 파일에 네임 스페이스를 이용해 범위를 제한하세요.


수정 사항이 발생하게 되면 컴파일러가 에러를 마구 뿌려대는 #define도 사용하지 마세요. 대신에 const, enum, 인라인 함수를 사용하세요.


숫자는 맨 위에 코드처럼 빨간색으로 표시가 되는데 이제부턴 소스 코드에 빨간색을 줄여보세요


그렇다고, 바로 위의 코드처럼 변수명을 길게 쓰라는 건 아닙니다. 이 글을 위한 독자들을 위해 풀어쓴 변수명일 뿐...


_T 매크로로 둘러싸기

프로젝트의 컴파일, 동작, 유니코드 빌드를 할 때, _T 매크로를 사용해 보세요. BCS에선 별 소용이 없지만, 유니코드 상에선 더없이 좋은 매크로입니다.


strXXX의 _tcsXXX 함수보단 CString을 이용하는 게 좋고,

char보단 TCHAR, const char보단 const CHAR을 이용하는 것도 좋습니다.


프로젝트를 빌드하다 보면 유니코드로 변환되는 경우도 있는데, 먼저 프로젝트 상의 속성을 Unicode로 변경해 놓으세요.


윈도우즈 NT, 2000, XP, Server 2003, 비스타를 포함해 이후에 출시되는 OS들도 유니코드를 기반으로 합니다. MBCS 기반의 응용 프로그램은 유니코드 기반의 프로그램보다 수행 속도가 느리기 때문이죠.


코드에 주석 사용하기

주석은 어떤 특별한 목적을 가졌을 때 사용합니다.


코드에 주석 사용하기[MFC 코딩 가이드] 코드에 주석 사용하기


주석은 이런 것들을 포함해야 합니다.

1. 주석 자체의 간결함

2. 이해하기 쉬운 분명한 정보

3. 소스코드 보단 흐름의 설명에 집중


소스 코드를 수정할 때 해당 사항을 추가로 기재하는 것을 잊지 마세요!


const 레퍼런스로 함수에 "Bigger" 매개변수를 전달

함수는 (클래스 타입이나 구조체 타입의) Bigger 매개 변수를 const로 전달받아 읽어야 하며, const가 아닐 땐 포인터를 사용할 수 있습니다.


항상, 매개변수의 값은 변경되어선 안 됩니다.


1
2
3
4
5
6
CString PrettyPrint(const CString& str)
{
.....
InfoCookie* SysInfoInitialize(long connTimeout, bool* legacypath)
{
.....
cs


코드를 복사하지 마세요

Copy/Paste를 하지 마세요!


기능을 고려해 함수 호출, 인라인을 적절하게 사용하세요. 함수 호출과 인라인은 컴파일 과정을 최적화시킬 수 있는 똑똑한 친구들입니다.


코드를 복사하지 마세요[MFC 코딩 가이드] 코드를 복사하지 마세요


위와 같이 구성하게 되면, 쉽고 빠르게 작은 기능들도 변경할 수 있습니다.


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

MFC 코딩 가이드 주의점 7개, 꼭 알아보세요

댓글