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

VC++ 개발자도 잘 몰랐던 코딩 팁 9가지 (좋은 코드, 가독성 상승 습관)

by vicddory 2018. 2. 20.

VC++ 개발자도 잘 몰랐던 코딩 팁 9가지 (좋은 코드, 가독성 상승 습관)


static 라이브러리 작성 시 주의사항


static 라이브러리를 작성해 application에 링크하려다 보면 LIBCD.lib 등의 링크 에러가 발생합니다. 이것은 static library 위저드와 application 위저드가 Code Generation 옵션을 서로 다르게 생성하기 때문입니다.


해결 방법

Project Settings --> C/C++ --> Code Generation --> Use run-time library -->Debug Multithreaded XXX


식으로 application에 사용된 속성과 맞춰줘야 합니다. 마찬가지로 라이브러리를 사용하는 프로그램 컴파일 시 already defined... LIBC.lib, LIBCMT.lib 등의 에러 메시지가 출력된다면 사용 중인 라이브러리 일부가 프로그램과 다른 Run-time library로 컴파일된 것이기 때문에 이 문제를 수정해 줘야 합니다.


LIBC.lib 는 single-thread 용이고 LIBCMT.lib는 multithread 용이며 LIBCD.lib 는 Debug용 single-thread입니다.

디버그 시 변수값 보기


사용자 지정 구조체 등의 값이 표시되지 않을 때나 크기가 아주 큰 변수의 경우 메모리 뷰를 띄워서 볼 수도 있지만 불편하다. 이 경우 변수,10 (앞의10 바이트만 표시) 형식으로 입력하면 된다. 단, 배열로 선언한 변수는 동작하지 않고 포인터인 경우만 된다. 원하는 데이터형으로 보고 싶은 경우에는 (형변환자) 변수 형식으로 입력한다.


VC++ 개발자 코딩 팁 프로그래머[VC++ 개발자, Visual C++ 프로그래머 팁]


텍스트를 칼럼으로 선택하기


텍스트를 라인으로 선택하지 않고 칼럼으로 선택하려면 ALT + 마우스 드래그, 또는 ALT+SHIFT+방향키를 사용한다. 칸을 맞춰놓은 경우 중간에 불필요한 것을 삭제하거나 끼워 넣을 경우 일일이 타이핑하지 않아도 되므로 편리하다.


무료 윈도우 컴파일러 사용하기


1. 코드 프로젝트의 다음 기사를 참고하여 2005 Express 버전을 설치하고 MFC 대신에 WTL을 개발 프레임워크로 사용.



2. 무료 리소스 편집기로는 ResEdit 을 추천.


3. VC++ 2005 Express에 리소스편집기 등록 방법: RC 파일을 선택하고 팝업메뉴에서 Open With...를 클릭한다. [Add...] 버튼으로 리소스 편집 프로그램을 등록 후 [Set as Default]를 클릭.


VC++ Visual C++ 개발자 코딩[VC++ 개발자, Visual C++ 프로그래머 팁]


들여쓰기 자동 정렬하기


입수한 소스가 들여쓰기가 제대로 안되어 있어서 읽기 불편한 경우 다음과 같은 방법으로 자동정렬할 수 있다. 우선 정렬할 부분을 선택하고 SHIFT + TAB 키를 몇 번 눌러 불필요한 공백 문자를 제거한다. 그리고 ALT+F8을 누르면 자동으로 들여쓰기를 맞춰준다.


추가된 클래스가 클래스 위저드에서 보이지 않을 때


보통은 클래스 위저드 파일(.clw)을 삭제하고 갱신해 준다. 이렇게 해도 클래스가 보이지 않으면 다음 내용이 소스 파일에 있는지 확인하고 없으면 추가해 준다. 헤더 파일에는 다음 내용이 들어 있어야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
// ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMyWnd)
    //}}AFX_VIRTUAL
 
    // Generated message map functions
protected:
    //{{AFX_MSG(CMyWnd)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
그리고 소스 파일에는 다음 내용이 있어야 한다.
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
    //{{AFX_MSG_MAP(CMyWnd)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
cs


위 내용이 없는 경우 클래스 위저드에 나타나지 않는다.


VC++ 개발자도 잘 몰랐던 코딩 팁 9가지[VC++ 개발자도 잘 몰랐던 코딩 팁 9가지]


편집한 리소스가 갱신이 안 된 경우


열심히 ICON 파일을 편집해서 저장했는데 VC6에서 열어보면 수정하기 전의 내용이 보여 당황하는 경우가 있다. 이때는 *.aps 파일을 삭제해 준다. 이놈이 리소스 데이터를 캐시 해두는 파일로 보인다. 그래서 실제 리소스 파일에서 읽어오지 않고 캐시된 데이터를 읽어 오므로 이전 데이터가 보이는 것이다.


소스 코드를 배포하는 경우에도 *.aps, *.plg, *.ncb, *.opt 및 *.obj 파일 등은 불필요하고 용량만 많이 차지하므로 삭제하고 배포하도록 해야 한다.


GetTickCount 사용 시 주의


간단히 시간 간격을 측정하기 위해 GetTickCount 는 32비트 값으로 시스템 시작 후 49.7일 마다 초기화된다. 하지만 unsigned long 타입이라서 overflow가 되더라도 큰 문제는 없다.


1
2
3
4
5
DWORD    begin, elaps;
begin = GetTickCount();
 
// 경과 시간 얻기
elaps = GetTickCount() - begin;
cs


예를 들어 0 - 0xFFFFFFFF의 결과는 1이 나온다.

200 - (0xFFFFFFFF - 100)의 결과는 301이 나온다.


하지만 적은 시간의 경과 시간 측정에 사용할 수 있으며 49.7 일이 넘는 경과 시간을 얻으려면 여전히 주의해야 한다.


출처 - 모르면 고생하는 VC++ 팁 [링크]

VC++ 개발자도 잘 몰랐던 코딩 팁 9가지 (좋은 코드, 가독성 상승 습관)

댓글