• ベストアンサー

条件付きコンパイル: #IF 1 Then と #IF 0 Then

条件付コンパイルで、 『#If 1 Then』と『#If 0 Then』の条件の違いを教えてください。 『#If ○○○=1 Then』などの場合はわかるのですが、 単に『#If 1 Then』の場合は何をもって真となるのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

条件式は、強制的に「True」又は「False」に解釈されます。 で、「数値」を「True」又は「False」に解釈する場合、 「0」は「False」、「0以外」は「True」になります。 (http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/vsfctcbool.asp) つまり、 『#If 1 Then』は、「必ずTrue」=常に有効 『#If 0 Then』は、「必ずFalse」=常に無効 に成ります。

delilah91
質問者

お礼

ご回答ありがとうございます。 >『#If 1 Then』は、「必ずTrue」=常に有効 この場合、『#If 1 Then』と『#End If』を削除して、 間の処理の記述だけを残した場合と同等の処理が行われるのでしょうか? >『#If 0 Then』は、「必ずFalse」=常に無効 この場合、『#If 0 Then』から『#End If』を(間の処理の記述を含み)全て削除しても 同等の処理が行われるのでしょうか?

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

バグなどの修正でリビジョンをあげたやAPIなどが変更されていて旧バージョンと互換性が無いとき場合に以前の処理をそのまま残しておく時に #If 0 then ... #end if でくくっておいたりしますよ 実行ファイルには影響を与えないがドキュメントとして残しておきたいなんて場合です

delilah91
質問者

お礼

ご回答ありがとうございます。 なるほど。 『#If 0 then』はコメント文代わりのようなものということでしょうか。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.3

> >『#If 1 Then』は、「必ずTrue」=常に有効 > この場合、『#If 1 Then』と『#End If』を削除して、 > 間の処理の記述だけを残した場合と同等の処理が行われるのでしょうか? そうなりますね。 > >『#If 0 Then』は、「必ずFalse」=常に無効 > この場合、『#If 0 Then』から『#End If』を(間の処理の記述を含み)全て削除しても > 同等の処理が行われるのでしょうか? そうなりますね。 #ちなみに、実行可能な行(ブレイクポイントが設定可能な行)に関して言えば、 #その行が有効か?は、その行にブレイクポイントを設定してみれば、 #容易に判断できます。 #無効になった行には、ブレイクポイントが設定できませんから。

delilah91
質問者

お礼

追加のご回答ありがとうございます。 おかげさまでスッキリできました。 『#If 0 Then』では確かにブレイクポイントの設定ができませんでした。 ありがとうございます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>『#If ○○○=1 Then』などの場合はわかるのですが、 if 文で必要なのは比較式の結果です。(True/False) 式の変わりに結果(値)を書き込んでも機能すると言うことでしょう。 If True Then MsgBox "1" If False Then MsgBox "0" ヘルプ(VBA)には、 『他の数値型をブール型の値に変換すると、0 は偽 (False) になり、0 以外の値はすべて真 (True) になります。』とあります。

delilah91
質問者

お礼

早速のご回答ありがとうございます。 申遅れましたが、Visual Basic 6.0を使用しております。 具体的には、 『プロジェクトプロパティ - 実行ファイルの作成 - 条件付きコンパイル引数』 の項目に0でない値が入力されている場合は全て真となる、 という認識で宜しいのでしょうか?

関連するQ&A