본문 바로가기

2010/09

Doxygen, C/C++외의 코드 문서화 도구 Doxygen은 주어진 소스 코드를 분석하고 소스 코드에 있는 특정한 형식의 주석을 이용해서 소스 코드를 자동으로 문서화해주는 프로그램이다. 결과는 일련의 HTML 페이지들이구, LATEX나 PDF 문서들을 만들어낼 수도 있다. 일단 Doxygen을 설치 하기 전에 아래와 같이 해당 문서에그래프 다이어그램도 만들기 위해서는 Graphviz의 Graph Visualization Software를 설치할 필요가 있다. graphviz-2.26.3 다운 받으러 가기 이 사이트에 접을 하면 위와 같이 첫 화면에서 current stable release 부분에서 다운을 받을 수 있다. graphviz-2.26.3.msi 이라는 파일 이름으로 다운이 받아졌을 것이다. 다운 받고 아무 폴더에 깔아 주기만 하면 된다.. 더보기
DirectX SDK 설치, Visual Studio 환경설정 DirectX 9.0을 이용한 프로래밍을 위한 환경 구축에 앞서, 당연히 우선 DirectX SDK(Software Development Kit)을 받아야 합니다. 저는 Feb2010을 쓰겠습니다. Microsoft 홈페이지 다운받으러 가기 용량이 크므로, 받는데 시간이 좀 걸립니다. 우선 파일을 다운 받았으면 설치를 해야 겠죠? 설치 파일을 누르면 아래와 같이 뜹니다. 넘겨 주시고, License Agreement 도 가뿐하게 동의~ 이건뭐 상관이 없으니 No를 선택하고 다음으로 넘어 갑니다. 무엇을 깔지 선택합니다. 뭐 손 안대는 것이 좋겠죠. 요즘은 고용량 시대이니 다 깔아 줍니다. 이후에 폴더 선택 하는 부분이 있는데, 제가 이미 깔려진 상태에서 스샷을 찍어서 그 부분은 자동적으로 넘어 가더군요... 더보기
비주얼 스튜디오(Visual Studio) 2010 - Header, Library 전역 설정 우선 Visual Studo가 2010으로 오면서 2008까지 있던 헤더 파일과 lib 파일들의 전역 경로 설정이 없어졌다. (원래는 Tool -> Option에 있었지만, 2010에서는 먹히지 않는다.) 그래서 2010을 사용하면, 매번 Include와 Library 경로를 설정해야 하는 번거로움이 부가적으로 붙게 되었다. 하지만, 이전처럼 전역으로 설정하는 방법이 있다. 그림만 봐도 이해하기 쉬울 것이다. 우선 Solution Explorer를 보면 밑에 Property Manager가 있다. 이 Property Manager에 가보면 Debug | Win32 와 Release | Win32가 보일 것이다. Debug의 하위 메뉴를 보면 여러가지가 나오는데 그 중 Microsofr Cpp Win32... 더보기
[C++] 형변환 (Typecasting) - const_cast, reinterpret_cast, static_cast, dynamic_cast 형변환 (Typecasting) : 그동안 명시적인 형변환을 할때는 괄호를 사용했었는데 C++에서는 이를 대체 할 수 있는 4가지 종류의 형변환 연산자가 추가 되었다. 그럼 그동안에 사용했던 명시적 형변환을 계속 쓰지 않고 새로운 형변환 종류가 추가 되었을까? 일단 기존의 C 스타일 형변환은 두가지 문제점이 있다. 첫번째는 C 스타일의 형변환(컴파일 타입 형변환)은 눈에 잘 띄지도 않고 찾아내기 힘이 든다는 점이다. 사용자가 프로그램을 짜다 보면, 형변환 말고도 괄호를 사용하는 부분이 많기 때문이다. 뭐 눈에 잘 안띈다고 단점이될까? 명시적 형변환을 수행한다는 것은 암시적인 형변환이 불가능하다는 뜻이고, 암시적인 형변환이 불가능하다는 것은 컴퓨터가 생각하기에는 문제의 소지가 있다는 뜻이다. 다음으로 C .. 더보기
[C++] 예외(Exception) 처리 try, catch, throw 예외 처리 : 예외란 무엇인가? 예외란 일반적이지 않는 상황을 말하는 것이다. 에러가 아니라는 말이다. 이런 일반적이지 않은 프로그램의 흐름을 처리 하는것을 예외 처리 라고 한다. Try, Catch, Throw : 일단 예외를 처리 하려면, 그에 맞는 문법을 써야 할 것이다. try { //예외 발생 예상지역 } catch(처리되어야할 예외의 종류) { //예외를 처리하는 코드가 존재할 위치 } 위는 try, catch 문이다. try에는 예외라 불릴 상황을 가진 문장을 집어 넣는 것이다. (try 문은 무조건 실행이 된다.) 처리되어야 할 예외의 종류를 받아 catch 문에서는 이 예외에 대한 처리를 해주는 것이다. (명시적으로 cout문을 이용해 예외가 발생했다고 처리해 주거나 한다) if ( 조건.. 더보기
[C++] 함수 템플릿? 템플릿 함수? 템플릿의 동작원리는 함수 오버로딩(Function Overloading)과 유사한 형태로 구성이 된다. 다음 템플릿화된 소스코드를 보자. #include using namespace std; template T Add(T a, T b) { return a+b; } void main() { cout 더보기
[C++] 함수 템플릿과 클래스 템플릿 (Function template & Class template) 함수 템플릿 템플릿의 종류에는 함수 템플릿, 클래스 템플릿 이 두가지로 나뉠 수 있다. 책마다 함수 템플릿 또는 템플릿 함수로 이 두가지로 표기가 되어 있는데, 이런 명사 두개가 오는 단어들은 뒤에가 진짜다. 우선 함수 템플릿, 템플릿 함수의 의미를 정리 해보자. - 함수 템플릿 : 함수를 기반으로 구현이 된 템플릿 (함수가 아니라는 뜻이다) - 템플릿 함수 : 템플릿을 기반으로 한 함수라는 뜻 우리가 앞서 본 템플릿 예제는 함수 템플릿이다. 이 함수 템플릿에 대해 좀 더 자세히 알아 보자. 둘이상의 타입에 대한 템플릿 #include using namespace std; template // 함수 템플릿 정의 void ShowData(T a, T b) { cout 더보기
[C++] 템플릿 (Template) 템플릿? : Template 이라는 단어는 모형자라는 의미를 가진단어로, C++에서 템플릿은 어떤 제품을 만들어내는 틀, 예를 들어 붕어빵에 비교해 보자면, 붕어빵을 만들어 내는 틀을 템플릿이라 말 할 수 있다. 템플릿의 특징은 기능은 이미 결정되어 있지만, 데이터 타입은 결정되어 있지 않는다는 특징을 가지고 있다. 아래에는 Sub라는 함수가 있다. int Sub(int a, int b) { return a-b; } Sub라는 함수는 두개의 int 형 데이터를 서로 빼주는 그런 함수이다. 이런 함수를 한번 템플릿화 해보겠는데, 템플릿의 특징은 무엇이라 했는가? 바로 기능은 결정되어 있고 데이터 타입은 결정되지 않는 그런것이라고 언급을 했었다. 여기서 기능은 Sub(바로 빼주는) 거라고 할 수 있고, 데이.. 더보기
[C++] 대입 연산자 오버로딩 대입 연산자 A a = b; 위와 같은 문장이 있다. 여기서 b는 A클래스의 b객체이다. 이 문장은 다음과 같이 묵시적으로 변환이 일어난다. A a(b); 결국 a라는 이름으로 객체 생성할때 복사 생성자를 호출 하는 형태가 된다. 그럼 다음과 같은 문장은 어떤 일이 일어날까? A a; B b; a = b; 여기서 a = b; 이 문장은 a(b) 이런 형태로 묵시적 변환이 일어 나지 않는다. 위와 같은 대입연산을 썼지만, 객체 생성문장이 아니기 때문이다. 그럼 여기서 a = b;는 다음과 같이 해석 될 것이다. a.operator=(b); 복사생성에서 호출되는 대입연산과 오버로딩 되어 있는 operator 함수 호출에서의 대입연산을 혼동하지 말자 대입 연산자 오버로딩 #include using namesp.. 더보기
[C++] 쉬프트 연산자 오버로딩 (cout, cin, endl) 쉬프트 연산자 : 쉬프트 연산자란, 우리들이 흔히 쓰는 cout, cin, endl 키워드를 쓸때 앞이나 뒤에 붙이는 연산자이다. 일반적으로 표준 라이브러리에 std라는 namespace에는 cout이나 cin에 관련된 클래스들이 있다. 그것이 바로 istream과 ostream이다. 이런 namespace를 일일이 입력하기 싫어서 using namespace 라는 간편한 문법을 쓰기도 한다. C++에서는 이런 쉬프트 연산자도 연산자 오버로딩이 가능하다. 쉬프트 연산자 오버로딩 int main(void) { Point p(1, 3); cout 더보기