ネタ元→まあまあ厳しくして欲しい (2/3) ~Option Strict に関連する3つの条件~
というわけで、Streetw☆さんのエントリからはや1ヶ月。そろそろまとめておかないと困ります(誰が?w
まずは復習もかねて現状の動作確認です。Visual Studio 2005 でVisual Basic のプロジェクトを一つ作ります。ConsoleApplication1とかでいいですかね。で、[プロジェクト] メニューの [プロパティ]から、[コンパイル] タブを開いてみると、以下のような感じになっています。
(クリックで大きく表示)
あ、そうそう、私は Visual Studio 2005 の[ツール] - [オプション] - [プロジェクトおよびソリューション] - [Visual Basic の既定値]は以下のようになっていますので、新規プロジェクトの作成時は Option Strict も Option Explict も 'On' になっています。
(クリックで大きく表示)
ConsoleApplication1.vbprojの中身では、Streetw☆さんの書かれていた NoWarn と、WarningsAsErrors が記述されていて、かつ、OptionStrict なんてのもありますね。上記の状態ではそれぞれ、
<OptionStrict>On</OptionStrict>
<NoWarn></NoWarn>
<WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
ってなっています。既定では全て警告になっているものをNoWarn、WarningsAsErrorsで切り替えているんでしたね。ではさっそく
Option Strict まあまあ
といきますか!!といってもやることは一つ。通知がエラーとなっているものを警告にしてみるだけです。こんな感じですね↓
(クリックで大きく表示)
Option Strictは「(カスタム)」になりました♪ まぁまぁです。このときのConsoleApplication1.vbprojの中身はもちろんOptionStrictはCustomに・・・って、あれ?
<OptionStrict>Off</OptionStrict>
<NoWarn></NoWarn>
<WarningsAsErrors></WarningsAsErrors>
Off!!?(「おふぅッ!!?」って読むとより効果的です。)
Off・・・だそうです。orz
で、これがMSBuildで Visual Basic コンパイラにどう渡されるのかなってことで出力を抜粋してみます。
Vbc.exe /optionstrict-
ほほぅ、そうきたか・・・。(特に意味はなし。)
ビルド時にはOption Strict Off が渡されている時は暗黙の型変換とかの警告メッセージは表示されないと思っていました。しかし、プロジェクトでは、全て警告としていますのでNoWarnはありません。なんかへんな感じがしますね。ちょっと自動生成されたModule1で暗黙の型変換とかやってみます。
Imports System.Collections.Generic
Module Module1
Sub Main()
Dim value As Double = "1" + 2.0R
Dim messages As Object = New List(Of String)
messages.Add("ちっちきちー!")
Dim pleaseInferMe = 1
End Sub
End Module
これをVisual Studio 2005 でみると・・・
(クリックで大きく表示)
警告3
でございます。なるほどなるほど、プロジェクトの設定と同じ動作をしますねぇ。
普通にOption StrictをOffに設定した場合はNoWarnにも値が設定されているので警告が出ないということなのでしょうか?であれば、NoWarnに値を設定しておけばOption Strictはなんでもよさげなのでしょうか?
Option Strict と /nowarn、/warnaserrorについて、ぜんぜん理解できていない気がしてきました。