SSISO Community

갤러리정

전처리 지시어 - CSharp

12.8 전처리 지시어

 

전처리 지시어를 C C++에서 사용해 보신 분도 있을 것입니다. C# 전처리 지시문을 사용하면 소스 코드의 특정 부분을 조건적으로 건너 있도록 만들어 오류나 경고, 조건 등을 보고하고 소스 코드의 특정 부분을 나타내도록 만들 있습니다. 전처리 지시문이란 용어는 C C++ 프로그래밍 언어와의 일관성을 위해서만 사용합니다. C#에서는 별도의 전처리 단계가 없습니다. 전처리 지시문은 어휘분석 단계의 일환으로 처리됩니다.

 

먼저, 전처리 지시어의 종류를 알아보고 전처리 지시어를 어디에 사용하는지 알아보도록 하겠습니다.

 

전처리 지시어의 종류

#define, #undef: 조건부 컴파일 기호를 정의하거나 정의를 해제할 사용합니다.

#if, #elif, #else, #endif: 소스 코드의 특정 부분을 조건적으로 건너 사용합니다.

#line: 오류나 경고에 대해 생성되는 번호를 제어할 사용합니다.

#error, #warning: 오류나 경고를 발생시킬 사용합니다.

#region, #endregion: 소스 코드의 특정 부분을 명시적으로 표시할 사용합니다.

12-6 전처리 지시어의 종류

 

전처리 지시어의 종류는 위의 표에 있는 것들이 전부입니다. 모두 #으로 시작합니다. 여기에서 가지만 알아보고 넘어가겠습니다. 많은 관심이 있으신 분들은 NET Framework SDK 설명서를 참고하시기 바랍니다.  

 

#define, #if, #endif

#define 심볼(Symbol) 정의하는데 사용됩니다. 다음과 같이 했을 , 해당 심볼이 존재한다는 의미를 담고 있습니다.

 

#define DEFINETEST

 

#define 특징

세미콜론(;) 사용하지 않음

단독으로 사용되지 않고 항상 다른 전처리 지시어와 같이 사용

심볼(symbol)에는 값을 할당할 없음

 

혼자서 특별한 뜻을 나타내지는 않습니다. DEFINETEST라는 심볼이 있고 없고의 문제이지 #define으로 어떠한 작업을 나타내는 것은 아닙니다. 보통의 경우 #define 사용했으면 다른 전처리 지시어와 함께 사용됩니다. 다음과 같이 DEFINETEST 문자가 존재하는지 하지않는지에 대한 처리를 다른 전처리 지시어인 #if #endif 사용하여 처리할 있습니다.

 

#if  DEFINETEST  

Console.WriteLine("Test OK.!!");

#endif

 

만약, DEFINETEST #define 되어 있다면 #if #endif 사이의 구문을 실행하라는 의미입니다. #define, #if, #endif 전처리기를 사용하는 예는 다음과 같습니다

&

DefineTest.cs

Ü #define 테스트하는 예제

#define DEFINETEST
using System;

class 
DefineTest {
  
public static void Main
() {
    #
if  
DEFINETEST
      Console.WriteLine(
"Test OK.!!"
);
    #endif
    Console.WriteLine(
"Test 
예제.!!");
  } 
//main
//class

C:\C#Example\12>csc DefineTest.cs

C:\C#Example\12>DefineTest

Test OK.!!

Test 예제.!!

 

#if DEFINETEST #define으로 정의되어 있으면 true 되어 다음에 나오는 문장을 실행하고, 만약 그렇지 않으면 실행하지 않습니다. #endif #if 뒤에 항상 따라 다니게 되어 있습니다.

1 #if, #endif

#if symbol

내용

#endif

심볼(symbol) #define되어 있으면

 

#if 전처리 지시어는 if문의 사용과 비슷하기 때문에 else 전처리 지시어도 존재합니다. #else 그것이며 else if 해당하는 것은 #elif입니다

 

#undef

#undef 지시어는 #define 심볼을 해제하는 기능을 하고 있습니다. 만약, DEFINETEST라는 것을 define했다면 이것을 해제(undefine)하기 위해서 사용하는 지시어입니다. 앞의 예제를 수정하여 #undef 추가한 예는 다음과 같습니다.

 

&

UndefineTest.cs

Ü #undef 테스트하는 예제

#define DEFINETEST
#undef DEFINETEST
using System;

class 
UndefineTest {
  
public static void Main
() {
    #
if  
DEFINETEST   
      Console.WriteLine(
"Test OK.!!"
);
    #endif
    Console.WriteLine(
"Test 
예제.!!");
  } 
//main
//class

C:\C#Example\12>csc UndefineTest.cs

C:\C#Example\12>UndefineTest

Test 예제.!!

 앞의 예제에서 #undef 지시어를 사용한 구문을 집어 넣었을 뿐입니다.

 

#undef DEFINETEST

 

#undef 지시어는 #define 되어 있는 심볼(Symbol) 해제하는 지시어입니다.

 

1 #undef

#undef symbol

#define 되어 있는 심볼(Symbol) 해제

 

위의 #define, #undef, #if, #endif 이용하여 만든 다음 개의 클래스는 어휘적으로는 상당히 다르지만 구문적으로는 같습니다

 

구문적으로 같은 클래스

#define TOM
#undef JANE
class 
Hello{
  #
if 
TOM
    
void 
sayTom() { }
  #
else
    
void 
helloTom(){ }
  #endif
  #
if 
JANE
    
void 
sayJane() { }
  #
else
    
void 
helloJane() { }
  #endif
//class

 

class Hello{
  
void 
sayTom() { }
  
void 
helloJane() { }
//class

12-7 전처리 지시문을 이용한 구문

 

#error, #warning

#error, #warning 같은 전처리 지시어를 만나면 에러를 발생시킨다든지 경고를 발생시키는 전처리 지시어도 있습니다. 코드 내에 원하시는 부분에 다음과 같이 입력하면 해당 부분에 에러나 경고를 발생시키는 전처리 지시어입니다.

 

#error “이것은 문법적인 오류입니다

#warning “경고! 코드는 불안전한 코드입니다.”

 

위의 전처리 지시어를 만나면 컴파일한 결과 창에서 해당 메시지를 출력할 것입니다.

 

#region #endregion

상식적으로 알아두어야 하는 지시어가 있습니다. #region #endregion .NET Visual Studio 편집기에서 사용하는 지시어로 특정 부분을 줄여서 보여주거나 펴서 보여주는 기능을 가지고 있습니다. Visual Tool 익숙한 분들은 쉽게 이해하실 것입니다 

 

그림 15-4 VS.NET 코드 편집기에서의 #region, #endregion 사용

 

위의 그림은 전부 펴져 있는 상태이며 이것을 구간별로 줄일 수도 있습니다. 보통의 경우 VS에서 자동으로 붙여주기 때문에 여러분들이 툴을 사용한다면 신경쓰지 않고 사용할 있는 기능입니다. 혹시 VS에서 작성한 코드를 다른 편집기를 이용하여 확인해 보시면 #region #endregion 붙어있는 것을 확인할 있을 것입니다.

2393 view

4.0 stars