#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