블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

'전처리기'에 해당되는 글 2건

  1. 2011.01.07 유용한 전처리기
  2. 2010.11.11 Debug in C# : using #if & conditional attribute

유용한 전처리기

Tip & Tech / 2011. 1. 7. 03:13

전처리기.

프리컴파일러(Free가 아니다 : PreCompiler)

 

프로그래머들이 자주 쓰는 전처리기 기능 3가지만 소개하고자 한다.

이것은 쓰라고 강요하기보단 다른 사람(그사람이 현업에서 근무할 가능이 높으므로) 코드를 이해하는데

조금이나마 도움을 주기 때문이다.

 

#pragma comment()

 

ex)

#pragma comment(lib, "dxguid.lib")

 

Project -> Setting -> Link(단축키:ALT+F7)에서 "dxguid.lib"와 "ddraw.lib"와 같은 lib파일을

링크해야 하는 과정을 대신해준다.

 

#pragma warning ()

 

ex)

#pragma warning (disable:4244)

 

4244의 경고 메세지를 출력창에 안보이도록 해준다.

참고로 4244는 무리한(캐스팅연산자가 없이하는) 형변환에 대한 경고이다.

 

#pragma message()

 

ex)

#define _QUOT(x) # x
#define QUOT(x) _QUOT(x)
#define OutputMessage(x)  message( __FILE__ "(" QUOT(__LINE__) ") : " #x )

 

void main()

{

  #pragma OutputMessage(하하하)

}

 

위모양대로 했을경우 컴파일러 출력창에 메세지를 출력해주며 파일과 라인번호를 입력하면

에러났을때 처럼 링크기능이 있다.

cpp의 컴파일 순서를 체크(물론 VC에서는 이에 해당하는 기능도 제공한다)해볼때 유용할거 같다.

[출처] 유용한 전처리기|작성자 나르메

반응형
Posted by blueasa
, |
C++을 사용하시는 분들은 VC계열에서 전처리자을 이용하는 방법에 대해서 익숙하신 분들이 많으실겁니다. 
특히 전처리자, #define, #if ~ #endif등을 이용해서 디버그할때만 필요한 코드를 릴리즈할때 무시하도록 하는 일은 한번쯤은 해보셨지 않았나 싶습니다. 

C#으로 넘어오면서 네임스페이스등의 개념이 본격적으로 사용되고 전처리자를 잘 사용하지 않게 되었습니다. 하지만 코드를 짜다보니 여전히 디버그용으로 만든 코드가 릴리즈에 포함되지 않게 하는일이 필요하더군요. 그래서 어떻게 쓸수있지 않을까 고민하던 중에 다음과 같은방법을 발견했습니다. 

using System; 
using System.Diagnostics; 

class Program { 
    static void Main(string[] args) { 

        #if DEBUG 
        DebugMethod1(); 
        #endif 

        DebugMethod2(); 
        Console.ReadKey(); 
    } 
    static void DebugMethod1() { 
        Console.WriteLine("Debug1"); 
    } 

    [Conditional("DEBUG")] 
    static void DebugMethod2() { 
        Console.WriteLine("Debug2"); 
    } 
}

from : Eric Gunnerson's C# Compendium
         http://blogs.msdn.com/ericgu/archive/2004/08/13/214175.aspx


빨갛게 된 부분을 주목해주세요, 위의 전처리자를 이용한 방법은 코드라인 일부를 디버그 모드에서 활성화하기 위해 감싸는 것입니다. VS에서 릴리즈 모드 컴파일로 들어가면 위 전처리자 사이의 코드는 회색으로 변하면서 실행이 안됩니다. 아래 Attribute를 사용하는 방법은 메소드 전체를 디버그모드에서만 컴파일 하기 위해 사용하는 것입니다. 이러한 팁은 매우 간단하지만 많은 분들이 모르시더라구요... 역시 구글검색은 안나오는게 없는것 같습니다. ^^

 좀더 덧붙이자면, C#에는 전처리 과정이 없기 때문에 컴파일 과정에서 무시되는것 같습니다. 그리고 뒤의 Attribute를 사용하는 방법은 문제가 있는데 함수의 return값이 void 이어야만 하고 public 메소드를 저렇게 만들게 되면 나중에 잡기힘든 버그가 발생 (분명 실행시켰는데 실행조차 안되는) 한답니다. 참고하세요.


반응형
Posted by blueasa
, |