Programming Language/C++
-
인라인 함수Programming Language/C++ 2017. 8. 8. 22:19
(2014년에 네이버 블로그에서 작성했던 글을 티스토리로 옮기며 이관했습니다) 인라인 함수는 속도 감량에 매우 큰 도움이 됩니다. 인라인 함수는 보통 함수를 호출할 경우 눈에 보이는 것처럼 그 함수에 가서 코드를 실행하는 것이 아니라 해당 코드에서 바로 함수 내부의 코드를 실행시키기 때문에 매개변수를 복사하거나, 다음 코드로 가게 하는 흐름을 생략해 주기 때문이죠. 그럼 "모든 함수를 인라인 함수로 선언해 주면 되겠다." 라는 생각이 분명히 들게 됩니다. 하지만 그럴 수는 없습니다. 프로그래머가 인라인 함수를 선언했다고 해도 그 함수가 인라인 함수가 되느냐 안 되느냐는 컴파일러가 결정하기 때문이죠. 인라인 함수가 안 되는 경우는 다음과 같습니다 1. 재귀함수 2. 다른 코드에서 함수의 주소를 가져와서 호..
-
[Win32 API] 윈도우 모니터 중간으로 위치 이동하기Programming Language/C++ 2017. 8. 8. 22:15
(2014년에 네이버 블로그에서 작성했던 글을 티스토리로 옮기며 이관했습니다) 폼 위치는 WNDCLASS 구조체나, CreateWindow 파라미터로 지정할 수 없기 때문에 WM_CREATE 메시지지로, SetWindowPos 또는 MoveWindow API로 변경합니다. 보통 폼 위치만 바꾸는 기능은 MoveWindow이기 때문에 SetWindowPos 보다는 MoveWindow를 많이 사용합니다. BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint); hWnd - 크기를 변경할 윈도우의 핸들 X - left Y - top nWidth - right nHeight - bottom bRepaint - 1 또는 0(..
-
[Win32 API] 다이얼로그 아이콘 변경Programming Language/C++ 2017. 8. 8. 22:12
(2014년에 네이버 블로그에서 작성했던 글을 티스토리로 옮기며 이관했습니다) CreateWindow API를 사용해서 폼을 생성하는 경우 WNDCLASS 구조체의 icon 멤버에 LoadIcon API를 사용하여 아이콘을 변경해 주면 되지만 다이얼로그는 조금 다릅니다. HICON 변수에 LoadImage API로 아이콘 이미지를 넣고, WM_INITDIALOG 메시지가 호출될 시 SendMessage API로 WM_SETICON 메시지를 호출시켜야 합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include "resource.h" #include HICON hIcon; BOOL ..
-
LRESULT / CALLBACK / WPARAM / LPARAMProgramming Language/C++ 2017. 7. 9. 04:09
(2014년에 네이버 블로그에서 작성했던 글을 티스토리로 옮기며 이관했습니다) Win32 API 경험자라면 LRESULT CALLBACK Func(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 형태의 콜백 함수를 많이 보셨을 겁니다. 의미를 알기 쉬웠던 HWND(핸들), UINT(unsigned int)를 제외한 키워드들이 어떤 의미를 함축하고 있는지 알아보겠습니다. 1. LRESULT LRESULT은 이렇게 선언돼 있습니다. 1 2 #typedef long LONG_PTR #typedef LONG_PTR LRESULT cs long 과 같습니다. 왜 typedef로 재정의가 되었냐면 개발 시 리턴값임을 명시해 주기 위해서입니다. 2. CALLBACK..
-
__cdecl, __stdcall 차이점Programming Language/C++ 2017. 1. 2. 00:06
(2014년에 네이버 블로그에서 작성했던 글을 티스토리로 옮기며 이관했습니다) 1. __cdecl 함수 호출용으로 스택에 쌓은 파라미터를 호출한 함수에서 제거해 주는 Convention이다. 알기 쉽게 간단한 예시를 보자. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include int __cdecl cdeclFunction(int a, int b) { return a + b; } int main() { int varA = 1, varB = 2; cdeclFunction(1, 2); return 0; } 위 C 코드를 Assembly로 짜보았다. (어셈블리 프로그래밍이 익숙하지 않아서 문법에 맞지 않는 부분이 있을 수 있는데 중요하지 않으..
-
C++ 템플릿 클래스는 언제 생성될까?Programming Language/C++ 2016. 12. 10. 15:58
신입으로 취업 전, soen.kr 이라는 웹사이트에서 C++ 을 공부했었는데 그 사이트에는 이렇게 설명되어 있다. 컴파일러에 의해 구체화된 함수는 실행 파일에 실제로 존재하며 컴파일 단계에서 미리 만들어지므로 실행시의 부담은 전혀 없다. 함수가 호출될 때 만들어지는 것이 아니다. 대신 매 타입마다 함수들이 새로 만들어지므로 구체화되는 수만큼 실행 파일의 용량이 늘어난다. 템플릿은 크기를 포기하는 대신 속도를 얻는 방식인데 크기와 속도는 항상 반비례 관계에 있다. (원문 : http://soen.kr/lecture/ccpp/cpp3/31-1-2.htm) 함수에 대한 설명이긴 하지만 클래스와 다를 게 없을 거라고 생각했다. 그런데 회사에서 어떤 분께 템플릿/제네릭 클래스는 객체를 생성할 때 클래스가 만들어진..