- ベストアンサー
【C#】ifと#ifの違い、そして#endif
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_019/csharp_abc03.html このページを参考にしましたが普通のifと何が違うのかわからなかったです。 何のために必要なのかもう少しわかり易く教えて下さい。 また、#endifってなんでしょう?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
プリプロセッサというのは、コンパイル前にプログラムを書き換えてしまうような処理をします そこにあるプログラムで言えば、次のものと同等になります // #define MY_SWITCH1→削除 // #undef MY_SWITCH2→削除 using System; namespace ConsoleApplication1 { class Class1 { static void Main(string[] args) { // #if true→削除 Console.WriteLine("#if true"); // 条件が成立するのでそのまま // #endif→削除 // #if false→削除 // 条件が不成立なので削除 // #endif→削除 // #if MY_SWITCH1 || MY_SWITCH2→削除 Console.WriteLine("MY_SWITCH1 or MY_SWITCH2 is ON");// 条件が成立するのでそのまま // #else→削除 // 条件が成立しているので#elseは削除 // #endif→削除 //#if MY_SWITCH1 && MY_SWITCH2→削除 // 条件が不成立なので削除 // #else→削除 Console.WriteLine("MY_SWITCH1 and MY_SWITCH2 is OFF"); // 条件が不成立なので#elseはそのまま // #endif→削除 } } } 使い道としては「実行中に変化しない条件分岐。使用しないコードは無効にして効率を上げたい」というときでしょう。 デバッグ時の表示に使う例はすでに出ています。 他に、同じソースコードを、GUIアプリケーションとコンソールアプリケーションとで共有する場合 GUI用には GUI_MODEを定義する/コンソール用には未定義にする としておけば #if GUI_MODE Messagebox("エラーです"); #else Console.WriteLine("エラーです"); #endif とすれば、GUI用にはメッセージボックスに、コンソール用にはコンソール画面にエラーメッセージが表示されるようになります。 C#だと、そんなに使う機会もないかもしれませんが、C/C++だと、CPU、OS等の環境に合せて適切な命令を選択する等に使用したりもします。
その他の回答 (1)
- nep0707
- ベストアンサー率39% (902/2308)
ifと#ifの違いがわからないのでしたら、いきなりその章を読むのはちょっと背伸びかも… まずは http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_019/cs2_019_01.html ここから読まれてはいかがでしょうか。 ありていに言えば、#ifはプリプロセッサ、つまりコンパイル前に行う処理の1つです。 従って、コンパイル時に条件処理がされます。 #endifは#if条件が真のときに処理されるブロックの終了を意味しています。 ifはいつでもコンパイルされ、実行時に条件判断がされます。 こちらは単一文かブロック("{}"でくくられた部分)の処理になります。 まぁ、紹介したURLを読んでいただいたほうが100倍分かりやすいかと…
補足
プログラム内でさらにデバッグしたい時に使うという認識で よろしいでしょうか?