프로그래밍이야기

[팁] C# define문과 C++ define문

푸르맨 2022. 2. 5. 01:09

C++에서 사용하는 Preprocessor define 문은 매우 유용하다.
초급 개발자의 경우, 당장 안 사용하는데 나중에 다시 사용할 지도 모르는 코드를 삭제하는 데 두려움이 있다. 기능 테스트에 필요한 데이터들이 들어 있어도 지우면, 나중에 다시 작업해야 할 거 같아 주석 처리를 많이 한다. 그래서, 코드를 열어 보면 아래와 같이 주석 처리를 길게 처리되어 있는 경우가 종종 있다.

 

 

이런 주석처리들이 한 두 개가 아니라면…
어떤 기능을 테스트하기 위해서 여러 군데 있는 주석들을 모두 풀어주어야 한다면, 여간 번거로운 게 아니다. 이럴 때 사용하는 게, 바로 Define 문이다.

 

C++ #define 문

 

C++ 프로젝트의 경우 해당 프로젝트의 Properties설정(프로젝트 설정)에 들어가면, C/C++ 속성 설정하는 메뉴 그룹 안에 ‘Preprocessor’라는 항목이 있다. 여기를 가면, 아래 그림과 같이 ‘Preprocessor Definitions’라는 곳에 원하는 Define을 추가할 수 있다.

위의 프로젝트의 경우, WIN32의 define문이 사용되었을 경우에만 메시지박스를 활용하여 로그를 확인할 수 있다.

 

다른 사용방법은 코드 내에서 사용하는 것이다. 아래와 같이 “ #define 아무개 “ 라고 적은 후, “ #ifdef ~ #endif “를 적는다. 이렇게 하면, #define문의 주석처리 여부에 따라 여러 군데 있는 연관된 코드들을 한번에 ‘작동 또는 작동 안함’ 상태로 제어할 수 있다. #define 문의 명칭만 보기 좋게 정의하면, 나중에 코드 볼 때도 편리하다.

 

 

C++에서 유용한 이 define문을 C#에서 사용할 때 애를 먹었다.

C#에서는 이 기능이 도무지 적용이 안 되었다.

마이크로소프트에서 define문을 제거 했나?

#region 기능이 추가되어서 #define 문이 사라졌나?

등등의 생각을 하던 끝에 아래와 같은 팁을 찾았다.

 

C# #define 문

우선 C# 프로젝트의 Properties설정(프로젝트 설정)에 들어가면, ‘Build’ 항목에서 아래 그림과 같이 빨간 색 테두리 안의 부분을 확인할 수 있다. 기본적으로 C#에서는 DEBUGTRACE 예약어를 define문으로 자동 사용할 수 있다. (체크박스만 체크하면)

 

 

그리고, 위의 그림에서 ‘Conditional Compilation symbols’‘TEST’와 같이 자신이 정한 임의의 예약어를 지정할 수 있다. 세미콜론 ; 을 사용해, 여러 개의 예약어를 지정할 수 있다. 위에서는 TEST, TEST1, TEST2 까지 지정했다.

 

 

C++과 마찬가지로 C#에서도 코드 내에서 #define문을 사용할 수 있다.

, 제약 조건이 있다.

C#에서는 무조건 코드 최상단에서만 #define 을 사용할 수 있다.

 

 

위의 그림과 같이 1, 2번 라인처럼 #define을 사용하는 것은 가능하다.

하지만, 최상단에 #define 문을 사용한 다음, 중간에 using 문을 넣고

밑에 #define을 하면 에러가 발생한다.