#line (C# リファレンス)#line (C# Reference)

#line を使用すると、コンパイラの行番号および (必要に応じて) エラーと警告に出力されるファイル名を変更することができます。#line lets you modify the compiler's line numbering and (optionally) the file name output for errors and warnings.

次の例では、行番号に関連付けられている 2 つの警告を報告する方法を示します。The following example shows how to report two warnings associated with line numbers. #line 200 ディレクティブは次の行番号が 200 (既定では #6) になるように強制し、次の #line ディレクティブまでファイル名を "Special" として報告します。The #line 200 directive forces the next line's number to be 200 (although the default is #6), and until the next #line directive, the filename will be reported as "Special". #line default ディレクティブは、行の番号付けをその既定の番号付けに戻します。つまり、前のディレクティブで番号が付け直された行をカウントします。The #line default directive returns the line numbering to its default numbering, which counts the lines that were renumbered by the previous directive.

class MainClass
{
    static void Main()
    {
#line 200 "Special"
        int i;
        int j;
#line default
        char c;
        float f;
#line hidden // numbering not affected
        string s;
        double d;
    }
}

コンパイルで生成される出力は次のとおりです。Compilation produces the following output:

Special(200,13): warning CS0168: The variable 'i' is declared but never used
Special(201,13): warning CS0168: The variable 'j' is declared but never used
MainClass.cs(9,14): warning CS0168: The variable 'c' is declared but never used
MainClass.cs(10,15): warning CS0168: The variable 'f' is declared but never used
MainClass.cs(12,16): warning CS0168: The variable 's' is declared but never used
MainClass.cs(13,16): warning CS0168: The variable 'd' is declared but never used

解説Remarks

#line ディレクティブは、ビルド プロセスで自動化された中間ステップで使用される場合があります。The #line directive might be used in an automated, intermediate step in the build process. たとえば、行が元のソース コード ファイルから削除されても、ファイル内の元の行番号付けに基づいてコンパイラに引き続き出力を生成させる場合は、行を削除してから #line を使用して元の行番号付けをシミュレートできます。For example, if lines were removed from the original source code file, but you still wanted the compiler to generate output based on the original line numbering in the file, you could remove lines and then simulate the original line numbering with #line.

開発者がコードをステップ実行すると、#line hidden と次の #line ディレクティブ (別の #line hidden ディレクティブではないと仮定) の間のすべての行がステップ オーバーされるように、#line hidden ディレクティブは、連続する行をデバッガーから隠します。The #line hidden directive hides the successive lines from the debugger, such that when the developer steps through the code, any lines between a #line hidden and the next #line directive (assuming that it is not another #line hidden directive) will be stepped over. このオプションは、ユーザー定義のコードとコンピューターによって生成されたコードを ASP.NET が区別できるようするために使用することもできます。This option can also be used to allow ASP.NET to differentiate between user-defined and machine-generated code. この機能を主に使用しているのは ASP.NET ですが、より多くのソース ジェネレーターが利用できる可能性はあります。Although ASP.NET is the primary consumer of this feature, it is likely that more source generators will make use of it.

#line hidden ディレクティブはエラーの報告でのファイル名や行番号には影響しません。A #line hidden directive does not affect file names or line numbers in error reporting. つまり、非表示のブロックでエラーが発生した場合、コンパイラはエラーの現在のファイル名と行番号を報告します。That is, if an error is encountered in a hidden block, the compiler will report the current file name and line number of the error.

#line filename ディレクティブは、コンパイラ出力に表示するファイル名を指定します。The #line filename directive specifies the file name you want to appear in the compiler output. 既定では、ソース コード ファイルの実際の名前が使用されます。By default, the actual name of the source code file is used. ファイル名は、二重引用符 ("") で囲み、前に行番号を付ける必要があります。The file name must be in double quotation marks ("") and must be preceded by a line number.

ソース コード ファイルは、任意の数の #line ディレクティブを持つことができます。A source code file can have any number of #line directives.

例 1Example 1

次の例では、デバッガーがコード内の非表示の行を無視する方法を示します。The following example shows how the debugger ignores the hidden lines in the code. 例を実行すると、次の 3 行のテキストが表示されます。When you run the example, it will display three lines of text. しかし、例に示されているようにブレークポイントを設定し、F10 キーを押してコードをステップ実行すると、デバッガーが非表示の行を無視することがわかります。However, when you set a break point, as shown in the example, and hit F10 to step through the code, you will notice that the debugger ignores the hidden line. 非表示の行にブレークポイントを設定した場合でも、デバッガーは無視することに注目してください。Notice also that even if you set a break point at the hidden line, the debugger will still ignore it.

// 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.");
    }
}

関連項目See also