[C#] #define을 C#에서도 쓰고 싶으세요?
c++ 프로그래밍에 익숙하신 분은
Preprocessor Definitions를 많이 활용하셨을 겁니다.
Preprocessor Property Pages에 가면
Preprocessor Definitions 를 추가할 수 있는데요.
위 프로젝트는 MFC 프로젝트이고 컴파일 환경은 Windows 32bit 이기 때문에 기본으로 WIN32, _WINDOWS가 포함되었고
디버그 모드라 _DEBUG 가 추가되어 있습니다.
1: #ifdef _DEBUG2: LOG(_T("어쩌고 저쩌고 로그"));
3: #그래서 위와 같이 디버그 모드일 때만 로그를 남기게 할 수도 있었죠.
그럼 이제부터 C# 이야기를 해보겠습니다.
C#에서 C++에서 처럼 Preprocessor를 이용해서 predefined condition을 이용하는 분들은 많이 보질 못한 것 같습니다.
C# 프로젝트에서도 Build 탭에 보시면 Conditional compilation symbols 이라는 기능이 있습니다.
그리고 기본적으로 디버그 모드이기 때문에 DEBUG, TRACE 가 이미 선언되어 있구요.
그렇다면 이미 선언되어 있는 DEBUG를 사용하여 디버그 모드일 때만 로그를 찍는 기능을 하고 싶은 순간이 찾아왔습니다.
1: #if DEBUG
2: Console.WriteLine("Log....");
3: #endif
C++ 처럼 #ifdef 대신 #if를 쓰는 것만 틀리고 사용법은 거의 비슷합니다.
근데 RELEASE 모드에서도 로그를 남기고도 싶으면 어떻게 할까요?
일단 프로젝트 프로퍼티에 빌드 탭에서 Conditional compilation symbols에 LOG를 추가하시구요
1: #if (DEBUG && LOG)
2: Console.WriteLine("Debug, Log...");
3: #endif
4: 5: #if (!DEBUG && LOG)
6: Console.WriteLine("Release, Log...");
7: #endif
8: 9: #if LOG
10: Console.WriteLine("Log....");
11: #endif
위와 같이 사용하시면, 디버그일 경우 로그 남기는 것, 릴리즈일 경우 로그 남기는 것, 둘 다 남기는 것을 구분지어서 사용할 수 있겠죠?
#if #else #elif #endif #define #undef
그리고 위와 같은 지시자를 사용할 수 있는데요.
주의 할 것은 C++은 코드 중간에도 #define을 할 수 있지만
C#에서는 코드에서 가장 상단에서만 #define을 할 수 있습니다.
1: #define TEST
2: 3: using System;
4: 5: #define TEST2
위의 코드에서는 1번 라인의 #define은 가능하지만, 5번 라인은 아래와 같은 컴파일 에러를 일으킵니다.
Error 1 Cannot define/undefine preprocessor symbols after first token in file
위와 같은 컴파일러의 기능을 사용하면 편리한 점이 많으니까, 프로젝트 하실 때 참고하세요~
"프로그래밍 / TIP& Study" 분류의 다른 글
| [TIP] XP, Vista에서 CD/DVD롬이 보이지 않을 경우 (0) | 2009/08/05 |
| [C#] WinForm 에서 Docking 순서 변경하기 (0) | 2009/07/29 |
| [WPF] InkCanvas 사용하기 (0) | 2009/06/29 |
| [C#] Control Library 만들 때 TIP (0) | 2009/06/26 |
| [C#] 자연스럽게 Pen으로 그리기 (0) | 2009/06/23 |
| [WPF] Canvas의 Width, Height Binding (0) | 2009/06/23 |
| [C#] DateTime으로 7일 후는 어떻게? (0) | 2009/06/23 |
| [C#] string의 byte 길이 구하기 (0) | 2009/06/22 |



댓글을 달아 주세요
좋은 정보 감사합니다.
별 말씀을요~ ^^