블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (666)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (217)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total343,756
Today5
Yesterday73

'runtime assert'에 해당되는 글 1건

  1. 2014.09.21 2. Core - Assert.

assert 기능은 프로젝트 진행에 무척 자주 사용하는 기능이다.
그냥 단순히 log 기능이라고 해도 무방할 듯 하다.
assert 기능의 구현은 크게 runtime과 compiletime으로 나뉘며
적당히 사용하면 되는데 매번 바뀌는 변수는 runtime으로 매번 체크를 하고
한번 체크후 절대 바뀌지 않는것은 compiletime으로 체크해서
매번 비교하는 부하를 없애주는데 의의가 있다.

이 작업을 하면서 살짝 삽질했던 dll 링크 관련 문제는 아래 링크를 참조하면 된다.

기존 버전 작업에는 이 assert가 core 외부에 별도의 프로젝트로 했었는데 
이번에 수정하면서 core쪽에 추가해 버렸다. 너무 세세하게 프로젝트를 나누다 보니
프로젝트가 너무 많아지고 그에따라 dll도 많아지고...그냥 그렇다.

소스는 간단하게 핵심 부분만 적어둔다.

1. dll import, export 관련.
#ifdef MGASSERT_EXP_DLL
#define MGASSERT_DLLDECL __declspec(dllexport)
#elif defined MGASSERT_IMP_DLL
#define MGASSERT_DLLDECL __declspec(dllimport)
#else
#define MGASSERT_DLLDECL 
#endif

2. unicode 관련.
namespace std
{
#if defined UNICODE || defined _UNICODE
typedef wstring tstring;
typedef wstringstream tstringstream;
#else
typedef string tstring;
typedef stringstream tstringstream;
#endif
}

3. assert 정의.
template<bool> struct CTAssert;
template<> struct CTAssert<true> {};
#define CT_ASSERT( exp) \
{ \
CTAssert<exp> _COMPILE_TIME_ASSERT_\
CTAssert<exp>* __p_ctassert_instance = &_COMPILE_TIME_ASSERT_; \

위의 CTAssert 템플릿을 보면 자료형이 아닌 bool 상수를 인자로 취하고 있따.
게다가 오직 bool 값이 true일 경우에만 정의되어 있다.
그렇다면 이 템플릿을 인스턴스화 할 때 true값 이외의 값을 넘겨주려 하면
템플릿이 정의되어 있지 않아 컴파일러가 에러를 발생시킨다는 것을 이용한다. 

이외에도 RT assert도 설정 할 수 있다.

그리고 윈도우 프로젝트라면 리소스 파일을 이용해서 dialog를 이용할 수도 있을 것이다.


DialogBox(instance, MAKEINTRESOURCE(다이얼로그 아이디), wnd, AssertDlgProc);

Mgin, ConsoleTester, main.cpp, TestAssert()


Reference Links
- c/c++에서 Compile Time Assertion
http://mtorange.blog.me/120019424125
compile time assertion
- Windows 동적 라이브러리(DLL)만들기 & 사용하기
- pre compile header. 미리 컴파일 헤더
- Unicode 사용하기
- gpg assert 논의


'작업장 > Mgin 제작' 카테고리의 다른 글

5. 프로젝트 설정 - dll  (0) 2014.10.09
3. dx 라이브러리 설정.  (0) 2014.09.22
2. Core - Assert.  (0) 2014.09.21
1. Property Sheet  (0) 2014.09.20
model tool - Lighting.  (0) 2012.01.07
DXUT BackBuffer assert  (0) 2011.07.06
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함