#line (C# リファレンス)
更新 : 2007 年 11 月
#line を使用すると、エラーや警告で出力するコンパイラの行番号とファイル名 (省略可能) を変更できます。この例は、2 つの警告の行番号がどのように報告されるかを示しています。#line 200 ディレクティブは、行番号を強制的に 200 に設定します。既定の行番号は 7 です。既定の #line ディレクティブの結果として、他の行 (#9) は通常の行番号になります。
class MainClass
{
static void Main()
{
#line 200
int i; // CS0168 on line 200
#line default
char c; // CS0168 on line 9
}
}
解説
#line ディレクティブは、ビルド プロセスの、自動化された中間ステップで使われる場合があります。たとえば、元のソース コード ファイルから行を削除した場合でも、コンパイラがファイル内での削除前の行番号のままで出力を生成できるように、行を削除してから #line を指定して、削除前の行番号指定をシミュレートします。
#line hidden ディレクティブは、後続の行をデバッガから隠します。これで、開発者がコードをステップ実行するときに、#line hidden から次の #line ディレクティブ (もう 1 つの #line hidden ディレクティブでないことが前提) までのすべての行がステップ オーバーされます。このオプションを ASP.NET で使用すると、ユーザー定義のコードとコンピュータが生成したコードを区別できます。この機能は主に ASP.NET で使用されますが、より多くのソース ジェネレータで利用される可能性があります。
#line hidden ディレクティブは、エラー報告のファイル名や行番号には影響しません。このため、隠ぺいされたブロック内でエラーが検出された場合、コンパイラは現在のファイル名とエラーの行番号を報告します。
#line filename ディレクティブにより、コンパイラ出力に表示するファイル名が指定されます。既定では、ソース コード ファイルの実際の名前が使われます。ファイル名は、二重引用符 ("") で囲みます。
ソース コード ファイルには、任意の数の #line ディレクティブを指定できます。
例 1
次の例は、デバッガがどのようにコード内の隠ぺいされた行を無視するかを示しています。この例を実行すると、3 行のテキストが表示されます。ただし、この例で示すようにブレークポイントを設定し、F10 キーを押してコードをステップ実行すると、デバッガは隠ぺいされた行を無視します。また、隠ぺいされた行にブレークポイントを設定しても、デバッガはその行を無視します。
// preprocessor_linehidden.cs
using System;
class MainClass
{
static void Main()
{
Console.WriteLine("Normal line #1."); // Set break point here.
#line hidden
Console.WriteLine("Hidden line.");
#line default
Console.WriteLine("Normal line #2.");
}
}