Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!시작하기

Microsoft. NET 을 시작하는 분들을 위한 강좌입니다. 주로 기초적인 내용과 때론 기본적인 내용을 다룹니다

C# 전처리 지시문

작성자 : 박종명
최초 작성일 : 2008-05-26 (월요일)
최종 수정일 : 2008-05-26 (월요일)
조회 수 : 5532

[1] 조건부 컴파일

1. 개요

특정 조건(미리 정의된 기호)을 기반으로 코드 컴파일 대상 코드 블록을 설정한다.

 

2. 지시문

일반적인 언어의 if 조건문과 거의 유사하다.(vb문법과 상당히 흡사하다)

#if , #elif , #else , #endif

 

3. Demo

아래의 코드는 조건부 컴파일을 사용해 특정 코드 실행을 제어 한다.

 

#define MKEX

 

using System;

namespace Demo

{      

        class Class1

        {             

               [STAThread]

               static void Main(string[] args)

               {

#if (DEBUG && !MKEX)

                       Console.WriteLine("DEBUG is defined");

#elif (!DEBUG && MKEX)

                       Console.WriteLine("MKEX is defined");

#elif (DEBUG && MKEX)

                       Console.WriteLine("DEBUG and MKEX are defined");

#else

                       Console.WriteLine("DEBUG and MKEX are not defined");

#endif

               }

        }

}

 

 

코드에서는 두 가지 조건을 검사한다.

a.       DEBUG 모드

b.       MKEX

 

만일 위의 소스가 포함된 프로젝트가 Debug 모드로 설정되어 있다면 위 두 가지 기호가 정의 되어 있으므로 아래와 같이 출력될 것이다.

"DEBUG and MKEX are defined"

 


4.
선언 지시문

위 데모에서 사용된 기호인 MKEX 는 선언 지시문 이라 한다. 선언 지시문을 사용하여 조건부 컴파일 기호를 정의 하거나 해제 할 수 있다

a.       기호 정의 : #defing

b.       기호 해제 : #undef

 

5. 기호 정의 방법

위 데모에서 사용된 기호인 DEBUG MKEX 와 같이 조건부 컴파일을 위한 기호를 정의 하는 방법은 아래 세가지가 있다.

a.        파일에 직접 선언 한다(선언 지시문 사용)

b.        프로젝트 속성을 설정한다


 

 

c.        솔루션 구성을 설정 한다

 

 

6. 사용 목적

조건부 컴파일을 사용하는 목적은 보통 디버그 모드로 컴파일 할 때만 특정 코드를 수행하고 싶을 경우 많이 사용하게 된다. 또는 프로젝트 특성에 기반하여 기호를 정의 하고 그 기호에 따라 수행하고자 하는

코드가 다를 경우에도 사용할 수 있다.

   

 

[2] 코드 영역 지정

1. 개요

한 파일내의 코드 영역(블록,범위)을 지정한다

 

2. 지시문

#region , #endregion

3. Demo

아래의 코드는 코드 영역을 지정하여 코드를 관리 한다

public class Class2

{             

        #region Method1 코드

        public void Method1()

        {

               Console.WriteLine("Method1");

        }

        #endregion

 

        #region Method2 코드

        public void Method2()

        {

               Console.WriteLine("Method2");

        }

        #endregion            

}

 

위의 코드 영역인 region 블록을 최소화 하면 아래와 같은 모습이 된다


   

4. 사용 목적

코드 영역을 지정하는 목적은 우선 코드 관리일 것이다. 하나의 파일에는 상당한 라인의 코드가 들어 있을 수 있다. 이때 코드 영역을 논리적으로 지정한다면 소스 관리하기가 한결 수월해 질 것이다

 

5. 주의

#region 블록은 #if 블록과 겹칠 수 없습니다. 즉 아래와 같이 두 지시의의 블록이 중복될 수 없습니다

#if (DEBUG && !MKEX)

        #region dd

               Console.WriteLine("DEBUG is defined");

#elif (!DEBUG && MKEX)

               Console.WriteLine("MKEX is defined");

#elif (DEBUG && MKEX)

               Console.WriteLine("DEBUG and MKEX are defined");

#else

               Console.WriteLine("DEBUG and MKEX are not defined");

#endif

        #endregion

 

 

 

 

[3] Warning AND Error

1. 개요

특정 상황일 때 경고나 에러를 발생하도록 컴파일러에게 알린다

 

2. 지시문

#warning , #error

3. Demo

아래의 코드는 DEBUG 모드일 때 경고가 발생하도록 한다.

class Class1

{             

        [STAThread]

        static void Main(string[] args)

        {                     

               #if DEBUG

                       #warning 경고입니다~

               #endif                                                      

        }

}

 

만일 DEBUG 모드로 컴파일을 할 경우 아래와 같이 경고가 발생함을 알 수 있다.



4. 사용 목적

일반적으로 조건부 지시문과 같이 사용된다. 실제로 배포되는 소프트웨어가 디버그 모드로 릴리즈 되는 상황을 예방하는 역할을 한다. 그러나 꼭 조건부 지시문과 같이 사용 될 필요는 없다. 아래와 같은 사용도 얼마든지 가능하다.

class Class1

{             

        [STAThread]

        static void Main(string[] args)

        {                     

               if(1==1)

               {

#warning 경고입니다~

               }

        }

}


이름
비밀번호
홈페이지
DG <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요