출처:: http://blog.naver.com/radian75/40008615603

 

원문이 아닌.. 요약한 내용. 원문은 위에~ 더 많은 정보는... MSDN에 다 있다. -.-

(필요할때 찾아볼 수 있도록 개략만 메모)

 

아차. 들어가기 전에 필수사항..

STL에서(일부 컨테이너에서 255문자열길이 이상의 심볼을 사용하는데, 이는 디버그할때 감시가 불가능하다) 여하튼.. VC6.0에서 난무하는 워닝을 제거하는 방법...

#pragma warning(disable:4786)

warning: 복수개의 워닝을 차단하거나, 특정 계열의 경고는 한번만 출력, 경고를 에러로 전환 등 다양한 기능이 있다. 자세한건 MSDN 벗뜨.... 워닝넘버에 대한 정보는 어디서?!!

관련된 워닝정보는 C####으로 검색! ^^  ex> C4786

 

또 다른 방법..

프로젝트 세팅에서 워닝 레벨을 확 따운시킨다. 사실 제일 속편하다; -.-;;

 

 

그럼.. 시작.

 

#pragma 키워드를 인식하지 못하는 컴파일러에선, 경고메세지 없이 그냥 #pragma무시.

 

 

#pragma anon_struct on 

     ..구조체...
#pragma anon_struct off

 

클래스나 구조체에 tag가 없는 구조체(익명) 생성을 허락?

    #pragma anon_struct on
    struct S {
       int i;
       struct {  // 익명구조체를 포함한다.
          int   j ;
          float x ;
       };
       class {  // 익명 클래스를 포함한다.
       public:
          long double ld;
       };
    S() { i = 1; j = 2; x = 3.3; ld = 12345.5;}
    };
    #pragma anon_struct off

 

#pragma argsused
함수(본체?) 앞에 붙이면, 사용되지 않은 변수에 대한 워닝 생략

 

 

#pragma codeseg   몰라 ㅡㅡ;

 

#pragma comment (comment type, "string")

컴파일이나 실행중 출력이나 인식은 되지 않으나, 라이브러리와 실행파일에 기록되는 코맨트

comment type의 종류 : user, exestr, lib (앞의 두개는 실행파일에, 뒤는 라이브러리. 자세한건? 위!) 

 

 

 

#pragma startup function-name <priority> 
#pragma exit function-name <priority>

특정 함수를.. 엔트리 포인트 이전에 실행시키고자 할때 -.-!?

 

 

#pragma hdrfile "filename.CSM"  

#pragma hdrstop

PCH관련.. 근데 csm파일이 뭔지 모르것다. 여하튼.. pch관련 정보를 담을 파일명 지정 등에 관한 듯..

 

아.. 이거.. 생각보다.. 기본 지식을 많이 필요로 하네..

정리는 나중에하고 본문에서 언급되는 사항들.. 제대로 숙지하고 더 공부한 후에 계속.. ㅡ.ㅡ

(진심은..... 졸려 ㅡ.ㅡ; )

 

 

#pragma inline

소스중에 어셈코드가 있음을 명시. (프로젝트세팅의 "-B"옵션과 같다. 커파일결과에 대한 영향은 전무하고, 시간에만 관여. (컴파일 중에 예측못한 어셈 명령어를 만나면. 모든것을 리셋하고 어셈에 맞추어서  다시 처음부터 컴파일 한다고 한다. 즉. 이 키워드나 -b옵션을 통해 미리 공지함으로서 재기동하는 시간 절약. )

 

 

 

#pragma pack(n)
#pragma pack(push, n)
#pragma pack(pop)

전문용어로 뭐라고 하지? 메모리 패키징방식?? -.-?

 

 

 

 

 

 

to be continue.. 일단 자고 내일 계속.

 

 근데.. 이거.. 가만 보니깐.. 왠지 프로젝트세팅과 연관이 많아 보이네..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

http://msdn2.microsoft.com/ko-kr/library/ms235291.aspx

 

대략정리하자면...

 

비주얼씨가 깔려있는 디랙토리를 찾아보면 vcredist_x86.exe이라는것이 있습니다. 이것을 상대방 피씨에 설치를하면(비주얼씨가 깔리지않은...) 윈도우 시스템 디랙토리에 재배포용 DLL이 깔리게됩니다.

 

그러나 이것은 릴리즈모드용 DLL만깔리게 되므로 디버그용은 따로 찾아서 해당 디랙토리에 카피를해야합니다.

 

실행파일의 종속성은 이전버전처럼 종속성검사툴을 따로사용안하셔도 메니피스트 파일을 열어보시면알수있습니다.

 

메니피스트파일은 xml파일인데.....

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

 

이런식으로 종속성을 찾아볼수가있습니다.

 

비주얼씨디랙토리\VC\redist 에보시면 빨간글씨와 같은 이름의 폴더가 보일겁니다. 거기에들어있는 DLL들이 필요하다는 소리입니다.

 

 

 

 
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

MFC가 아닌 응용프로그램에서 ASSERT(), VERIFY(), TRACE() 사용하기


by Gabriel Fleseriu

원문 : http://www.gamedev.net/reference/articles/article1846.asp
번역 : conaman(conaman@spirit3d.net)

출처: http://www.spirit3d.net/MainFrameSet.htm

 

C++ 로 게임 개발을 해 올 때 몇몇 사람들이 MFC를 사용하기로 결정을 했습니다 늘 저는 ASSERT(), VERIFY(), TRACE() 매크로들의 유익함을 발견합니다 그래서 저는 윈도우 플랫폼을 위한 어떤 프로젝트에서든지 작업할 수 있도록 제 자신의 버전을 만들기로 했습니다.

약간 생각하게 하는 것들:

  • ASSERT()는 값이 0이면 실행을 멈추도록 하기 위해 매개변수을 평가하기로 되어있습니다 릴리즈 모드에서는 assert가 아무것도 전개되지 않도록 해야만 합니다.
  • VERIFY()는 릴리즈 모드에서 매개변수를 전개하도록 되어 있는 것을 제외하고는 ASSERT() 와 아주 유사합니다.
  • ASSERT() 는 어떠한 함수호출도 포함되어 있지 않는 표현으로 사용되어야만 합니다. 함수호출을 포함하는 표현을 위해 VERIFY() 를 사용해야만 하고, 그렇게 해서 함수호출은 릴리즈 모드에서도 보전됩니다.
  • TRACE() 는 디버그 윈도우에 출력되는 것을 제외하고는 printf() 의 대응물입니다. 릴리즈 모드에서는 TRACE() 또한 아무것도 전개하면 안 됩니다.
  • 세개의 매크로들 중 어떤것도 릴리즈 모드에서 어떤 런타임 벌점을 의미하지 않습니다. 그 매크로들은 미리 정의된 _DEBUG 매크로를 사용해서 디버그 모드와 릴리즈 모드 사이를 구별합니다. 이것은 Microsoft Visual C++에 특정적입니다. 만약 다른 몇몇 다른 컴파일러를 사용하고 있다면 적절한 매크로를 사용해야만 할 것입니다.
  • 바퀴를 재발명하기 위해 어떤 이해도 없기 때문에 저는 MFC 코드로 슬쩍 엿봤고 유사하게 저의 매크로들을 만들었습니다. ASSERT() 와 VERIFY() 를 위해서 저는 멋진 "Debug assertion failed..." 대화상자들은 곁에 남겨두고 간단하게 아주 평범한 breakpoint 를 구현 했습니다.


    ASSERT(), VERIFY(), TRACE() 를 지원하는데 필요한 두 파일들이 있습니다. 그것은 debug.h 와 debug.cpp 입니다. 프로젝트의 몇몇 메인 헤더에 debug.h 를 추가해야만 합니다. 그것은 자신 안에 어떤 파일도 포함하지 않기 때문에 순환 포함(recurrent inclusion) 들에 더럽혀지지 않습니다. 또한 프로젝트의 소스파일들에 debug.cpp 를 더해야만 합니다.

     

    Here they are:

    /*
     *  debug.h
     */

    #ifndef __DEBUG_H__

    #define __DEBUG_H__

    #ifdef _DEBUG

    void _trace(char *fmt, ...);

    #define ASSERT(x) {if(!(x)) _asm{int 0x03}}

    #define VERIFY(x) {if(!(x)) _asm{int 0x03}}

    #else #define ASSERT(x)

    #define VERIFY(x) x

    #endif

    #ifdef _DEBUG

    #define TRACE _trace

    #else inline void _trace(LPCTSTR fmt, ...) { }

    #define TRACE 1 ? (void)0 : _trace

    #endif

    #endif  // __DEBUG_H__

     

    /*
     *  debug.cpp
     */

    #ifdef _DEBUG

    #include <stdio.h>

    #include <stdarg.h>

    #include <windows.h>

    void _trace(char *fmt, ...)

    {

        char out[1024];

        va_list body;

        va_start(body, fmt);

        vsprintf(out, fmt, body);

        va_end(body);

        OutputDebugString(out);

    }

    #endif

    Discuss this article in the forums


    안정적인 DNS서비스 DNSEver DNS server, DNS service
    Posted by 키르히아이스
    ,

    완성형/조합형 한글/한자/특수문자 코드표입니다.

     

    조합형은 조합 가능한 모든 한글(11172자)이 아닌,
    완성형과 1:1 대응하는 2350자의 코드만 작성했습니다.

     

    C와 Pascal 소스로 제공하니 필요하실 때 참고하세요.
    (예: 완성형/조합형간 상호변환)


    2002년 1월 13일

     

     


    안정적인 DNS서비스 DNSEver DNS server, DNS service
    Posted by 키르히아이스
    ,