プロが教える店舗&オフィスのセキュリティ対策術

http://www.atmarkit.co.jp/fdotnet/csharp_abc/csh …

このページを参考にしましたが普通のifと何が違うのかわからなかったです。
何のために必要なのかもう少しわかり易く教えて下さい。
また、#endifってなんでしょう?

A 回答 (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等の環境に合せて適切な命令を選択する等に使用したりもします。
    • good
    • 0

ifと#ifの違いがわからないのでしたら、いきなりその章を読むのはちょっと背伸びかも…



まずは
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/cs …
ここから読まれてはいかがでしょうか。

ありていに言えば、#ifはプリプロセッサ、つまりコンパイル前に行う処理の1つです。
従って、コンパイル時に条件処理がされます。
#endifは#if条件が真のときに処理されるブロックの終了を意味しています。

ifはいつでもコンパイルされ、実行時に条件判断がされます。
こちらは単一文かブロック("{}"でくくられた部分)の処理になります。

まぁ、紹介したURLを読んでいただいたほうが100倍分かりやすいかと…

この回答への補足

プログラム内でさらにデバッグしたい時に使うという認識で
よろしいでしょうか?

補足日時:2012/12/28 10:20
    • good
    • 4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A