본문 바로가기

Programming/C++

비쥬얼 스튜디오 디버깅 팁( Visual Studio Debugging Tips ) 출처 http://kindtis.tistory.com/518 스코프를 벗어난 객체 주시하기디버깅을 하다 보면 스코프를 벗어난 객체를 계속 주시하고 싶을 때가 있습니다. 하지만 비쥬얼 스튜디오의 조사식 창(Watch Window)에서는 입력한 객체가 스코프를 벗어나면 비활성화가 되어 더이상 값을 확인 할수 없게 되어버리죠. 이 때, 조사식에 주시 하고픈 객체의 포인터를 입력하면, 해당 객체가 스코프를 벗어났더라도 (해당 객체가 살아 있다면) 지속적으로 값을 확인할 수 있습니다. 위 코드를 보면 mHyuna 객체는 이미 스코프를 벗어나 조사식 창에서 비활성화가 되었지만, (CHyuna*)0x0031fe2c 식으로 직접 객체의 주소를 참조하여 스코프를 벗어난 객체의 값을 확인할 수 있습니다. 배열값 확인간혹 .. 더보기
win32 프로젝트에서 콘솔창(dos) 띄우기 헤더 설정하고#include // 도스창 띄움AllocConsole();freopen( "CONOUT$", "wt", stdout); 끝! 더보기
try – catch, throw -예외처리- try – catch, throw 지금까지 알면서도 사용하지 않았던 try -catch문... 꼭 사용할 이유없이 if문등으로 예외처리는 가능하지만 보다 명확하고 명시적으로 코드를 보여주기위해선 꼭 필요하다는 사실이 요즘 들어 느끼게 되어 다시 "게임개발자를 위한 C++ 책"에서 그 내용을 찾아 정리해본다. 프로그램 코드에서 예외가 발생할 것 같은 부분은 특정한 몇 곳이다. 즉, 코드의 일부 – 예를 들면 5% - 에서만 예외 처리를 수행할지도 모른다. 이러한 부분이 문법적으로 명시된다면 프로그램을 유지 보수하는데 많은 이득이 있을 것이다. 즉 if문으로 예외처리가능하지만 구지 try catch문 안에 넣은 이유가 바로 문법적인 명시때문이다.! void main() { int i=5, j=2.. 더보기
Effective C++ 정리글(펌) Effective C++ Scott Meyers 저 연승훈, 표광준 역 Eclipse(김주현) 정리 ※ C에서 C++로의 전환 1. #define 보다는 const와 inline을 사용한다. 전처리기보다는 컴파을러를 선호한다. 전처리기에서 처리되는 내용은 디버깅시, 컴파일러가 알고있는 내용이 아니기 때문에 전처리기를 이용한 심볼이 들어간 자리에서 에러가 나게 되면 알아차리기 어렵다. 전처리기를 이용한 메크로의 사용은(Ex. #define max(a, b) ? ((a) : (b)) ) 올바르게 사용하였을 경우에도 오류(Ex. Max(++a, b); 의 경우 a의 값이 두번 증가하게 된다.)가 생길 가능성이 있다. 이 경우는 inline함수를 이용해서 사용하는 것이 좀 더 효율적이다. (Ex. Inline .. 더보기
비트 연산자 0. 비트 연산 n 비트 연산은 객체 상태를 추적하기 위해서 플래그를 설정할 때 유용하게 사용된다. n 모든 비트는 8비트를 가지고 있고 따라서 4바이트의 길이는 32비트의 독립된 플래그를 가질 수 있다 비트는 그 값이 1이면 설정되었다라고 하고 0이 되면 설정되지 않았다 할 수도 있다. n C++에서 각각의 비트에 작용하는 비트 연산자를 제공을 한다. 이는 논리 연산자와 비슷해 보이지만 다르다. 비트 연산자는 아래 표와 같다. 기호 연산자 & | ^ ~ AND OR 배타적인 OR 보수(Complement) n 비트 연산자 AND AND(&) 연산자는 논리 연산자(&&)와 달리 ‘&’가 한 개가 쓰인다. 두 개의 비트를 AND를 하면, 만일 두 개의 비트가 다 1이면 1이고 나머지는 0이된다. n 비트 .. 더보기
namespace Declaration #include namespace Game { int SelfMul(int nA) { return nA * nA; } } namespace Myth { float SQRT(int nA) { return sqrt(nA); } } int main() { Game::SelfMul(5); Myth::SQRT(5); return 0; } 이름이나 사용처가 헷갈릴 함수에 이름을 붙여 준다. 그리고, cout, cin, endl 을 사용할 때 신표준에 맞춰서 std::cout, std::cin, std::endl 으로 작업을 하였는데 불편함이 존재 합니다. 계속해서 std:: 를 적어주어야 하기 때문인데 using namespace Game; 라고 선언하면 Game:: 을 붙일 필요가 없어집니다. using Game.. 더보기
friend 함수 A 클래스에 B 클래스를 friend 선언 했다면 B 클래스는 A 클래스의 모든 정보에 접근과 수정 가능 해진다. 정보의 은닉성이라나 이걸 파괴하는 함수 앵간하면 안쓰는게 좋을지도 ㄷㄷ;; 클래스가 복잡하게 꼬일 경우가 있다면 쓰는게 나을거 같은생각? 뭐 클래스를 복잡하게 안 꼬으면 해결 될듯 하다. 뭐 클래스 뿐만 아니라 함수, 변수등에도 사용 가능 예제는 귀찮으니 생략 더보기
Class 에서 함수 정의에 사용되는 static C++ 에서 class 멤버 중 static 으로 선언된 멤버는 그 class로 생성된 객체(인스턴스)가 몇개든 간에 한개만을 메모리 할당을 하여 공유하여 사용한다. C++ 에서 class( 멤버 변수, 멤버 함수의 선언 & 정의 ) 에 static 이 사용되면 그 class 로 생성된 객체(인스턴스)가 몇개든 간에 한개만을 메모리 할당을 공유하여 사용한다. Example The following example shows the use of static in a class. // static2.cpp // compile with: /EHsc #include using namespace std; class CMyClass { public: static int m_i; }; int CMyClass::m_i .. 더보기
C++ inline 함수 * inline함수 - 매크로함수와 그냥 함수의 중간적인 성격을 띤 함수이다. - 일반적인 함수를 사용하면 필요할 때마다 호출하여 사용하므로 실행파일의 크기를 줄일 수 있으나 제어권의 이동이 심하므로 실행 속도가 느려진다. - 매크로 함수는 컴파일시 전개되어 치환되므로 제어권 이동이 발생하지 않으므로 속도가 빠르지만 데이터형 지정을 할 수가 없고 실행파일의 용량이 커지게 된다. - 인라인 함수는 컴파일시 통째로 매크로처럼 전개되어 속도면에서 큰 이득을 얻는다. 그리고 데이터형 체크를 할 수 있는 함수이다. 용량이 커지는 단점이 있긴 하지만 간단한 작업을 하는 함수의 경우에 이용하면 매우 편리하다. * inline 함수의 제약조건 - inline 함수 내에서는 루프문(do whie, while, for),.. 더보기