본문 바로가기

C++ Programming

(16)
호출스택( call stack )이 제대로 보이지 않는 경우 주로 포인터 NULL참조를 할 때 발생하는 경우이다.그런데, visual studio에서 콜스택을 제대로 보여주지 않은 경우가 있을 수 있다.아래와 같은 경우이다. 이런 경우 정확히 어딘가에서 NULL포인터를 참조 하는지 알 수가 없다.따라가보면 Library 까지 들어가기 때문에 이는 역시 어디가 문제인지 알 수가 없다. 그래서 디버그 옵션에 예외에 보면 해결할 수 있는 방법이 있다. 디버그 예외설정에 Win32 Exceptions 트리를 눌르면 Access violation이 있는데 이것을 체크해주면 정상적으로 작동이 된다. 자체 IDE에서 접근불가에 대한 crash를 깊게 라이브러리단 까지 표현해 주는 것인데, 여기서 체크를 해주면 해당코드에서 멈추게 된다. 그러면 호출 스택이 안깨지고 어디에서 N..
visual studio 빌드 속도 향상 1. HDD보다는 SDD( 환경적 요소 )2. Stdafx.h 이용3. 프로젝트 속성->구성 속성->C/C++->코드생성에서 "최소 다시 빌드 가능" 아니요(/GM-)설정( 멀티프로세서 컴파일을 하기 위해서 필요함 )4. 프로젝트 속성->구성 속성->C/C++->일반에서 "다중 프로세서 컴파일" 예(/MP) 설정 실제로 확인하기 위해선 컴파일 하는 중 작업관리자에 CPU 사용률을 보면 제대로 적용되었다면 CPU 사용100%로 컴파일 하는 것을 확인해볼 수 있다.
문자열과 각 타입간의 변환 void CUtil::CStringToString( std::string* p_Dest, CString p_Obj ){*p_Dest = p_Obj;} void CUtil::StringToCharArray( char* p_Dest, std::string p_Obj ){strcpy( p_Dest, p_Obj.c_str() );} void CUtil::CStringToCharArray( char* p_Dest, CString p_Obj ){std::string temp = p_Obj;strcpy( p_Dest, temp.c_str() );} void CUtil::CStringToUINT( __time64_t* p_Dest, CString p_Obj ){*p_Dest = _tcstoui64( p_Obj, NUL..
C++ 캐스트 연산자 C의 캐스트 연산자의 문제점C의 캐스트 연산자는 책임이 모두 개발자에게 있다. 원하는대로 바꿔 줄테니 결과가 어찌 되든 상관 없다는 식이다. 그래서 C++에서는 좀 더 안전하고 변환 목적에 맞게 골라 쓸 수 있는 4개의 새로운 캐스트 연산자를 제공한다. 이 연산자들은 C의 캐스트 연산자에 비해 규칙이 다소 엄격해 실수를 줄일 뿐만 아니라 어떤 의도의 타입 변환인지를 좀 더 분명히 표시하는 장점이 있다. static_cast 연산자static_cast 연산자는 지정한 타입으로 변경하는데 무조건 변경하는 것이 아니라 논리적으로 변환 가능한 타입만 변환한다. 기본형태static_cast( 대상 ) 가능한 경우실수형 -> 정수형정수형 -> 실수형상호 호환되는 열거형과 정수형과의 변환double, ..
STL(Standard Template Library) STL이란?표준 템플릿 라이브러리(Standard Template Library: STL)는 C++에서 일반적인 자료 구조와 알고리즘을 구현해 놓은 라이브러리의 집합이다. 지원하는 자료구조에는 vector, map, set 등이 있으며, 여러 가지 탐색 변경 알고리즘을 지원해 주고 있다. vector와 같은 자료 구조에 삽입할 변수의 형이 정해지 있지 않고, 일반적인 형이라고 가정한 뒤 vector와 같은 컨테이너가 구현되어 있다. 즉 이 때는 C++언어의 템플릿 기능을 이용하고 있다. 이처럼 자료의 유형에 상관없이 구현되어 있기 때문에 generic이라고 말하기도 한다. 컨테이너?자료의 집합을 나타내는 클래스 템플릿이다. 각각의 컨테이너는 단위 작업에 필요한 시간복잡도에 의해 구분된다. 컨테이너 종류 ..
원형큐를 이용하는 이유 배열을 이용한 큐는 이미 사용한 영역인 front의 앞부분에 대해서 다시 활용을 못하기 때문에 메모리를 낭비하는 단점이 있음.이동 큐를 이용하여 큐가 다 찼을 경우 데이터를 앞쪽으로 이동시켜 사용하는 방법이 있지만 남아있는 모든 데이터를 모두 이동시켜야 한다는 불편한 작업을 수행해야 하기 때문에 비효율적임.원형 큐를 이용하게되면 이와 같은 단점을 보완하는 구조로 큐의 맨 끝과 맨 처음이 연결된 형태의 구조이기 때문에 이미 꺼내어 사용한 큐의 앞부분에 다시 데이터를 저장하여 재사용이 가능하기 때문에 선형큐보다 효율적임
template 사용할 때 C4042 error template 사용 중에 자꾸 맞는 문법인데 "C4042 저장소 클래스가 잘못되었습니다" 라는 오류가 나왔는데 알고봤더니 template 를 template로 썼던 것................. 아마 분명 이런 사람이 많을 것 같아 포스팅
함수 템플릿 C++은 여러 가지 개발 방법을 지원하는 멀티 패러다임 언어라고 하는데 적어도 다음 세 가지 방법으로 개발을 할 수 있다. ① 구조적 프로그래밍 : C언어에서와 마찬가지로 함수 위주로 프로그램을 작성할 수 있다. C++이 C언어의 계승자이므로 C언어의 개발 방법을 지원하는 것은 당연하다.② 객체 지향 프로그래밍 : 캡슐화, 추상화를 통해 현실 세계의 사물을 모델링할 수 있으며 상속과 다형성을 지원하기 위한 여러 가지 언어적 장치를 제공한다.③ 일반화 프로그래밍 : 임의 타입에 대해 동작하는 함수나 클래스를 작성할 수 있다. 객체 지향보다 재사용성과 편의성이 더 우수하다. 일반화 프로그래밍은 주로 C++ 템플릿에 의해 지원되며 C++ 표준 라이브러리가 일반화의 좋은 예이다. 템플릿은 C++이 일반화를 위해..