Microsoft/C#
#warning, #error, #line 지시자
unD3R
2014. 5. 8. 12:39
#warning, #error, #line 지시자
그동안 개발하면서 이것들을 직접 쓸 일이 없었습니다.
#define/undef 이나 #if/else, #region/endregion 정도만 썼지요. 다들 그러셨을거라고 추측해 봅니다. :)
각설하고, 살펴보도록 하지요.
public partial class MainWindow : Window
{
public MainWindow() {
#line 1 "..\..\App.xaml"
#warning #1 What is #warning?
#line default
#error What is #error?
InitializeComponent();
}
}
위와 같이 #line, #warning, #error 를 각각 작성하고, 빌드를 해 보았습니다.
output 창을 보니, 아래처럼 오류가 나고, 빌드를 실패하네요.
1>------ Build started: Project: InkExample, Configuration: Debug Any CPU ------
1>e:\Development\App.xaml(1,10,1,30): warning CS1030: #warning: '#1 What is #warning?'
1>E:\Development\BlogPost\InkExample\MainWindow.xaml.cs(26,8,26,23): error CS1029: #error: 'What is #error?'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
이로서 다음과 같은 역할을 한다는 사실을 알게 되었습니다.
#line [line] [filepath]
에러나 경고 발생시, output 에 나타날 파일의 line 정보를 설정합니다.
그리고 #line default 는 다시 본래 자동값으로 되돌려 놓는 역할을 하네요.
#warning
컴파일 시점에 강제로 warning 을 표시하도록 합니다.
#error
컴파일 시점에 강제로 error 를 발생시킵니다.
당연히 빌드는 실패됩니다. 정말 error 가 난것 처럼요. :)
그렇다면, 이 두가지를 어느 경우에 사용하면 좋을지 생각해 보았습니다.
지금 제 머릿속에 떠오르는 것은 #define 과 함께 쓰면 좋을듯 합니다.
아래처럼 말이죠. :)
#if !WINDOWS_XP && !WINDOWS_7
#error Please check the os.
#endif