#line (référence C#)#line (C# Reference)

#line vous permet de changer la numérotation de lignes du compilateur et (éventuellement) le nom de fichier pour les erreurs et les avertissements.#line lets you modify the compiler's line numbering and (optionally) the file name output for errors and warnings.

L’exemple suivant montre comment signaler deux avertissements associés à des numéros de ligne.The following example shows how to report two warnings associated with line numbers. La directive #line 200 assigne de force le numéro 200 à la ligne suivante (bien que le numéro par défaut soit 6) ; jusqu’à la prochaine directive #line, le nom de fichier indiqué est « 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". La directive #line default rétablit la numérotation de lignes par défaut, qui compte les lignes renumérotées par la directive précédente.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;
    }
}

La compilation produit la sortie suivante :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

NotesRemarks

La directive #line peut être utilisée dans une étape intermédiaire automatisée du processus de génération.The #line directive might be used in an automated, intermediate step in the build process. Par exemple, si des lignes ont été supprimées du fichier de code source d’origine, mais que vous voulez que le compilateur continue de générer une sortie sur la base de la numérotation de lignes d’origine du fichier, vous pouvez supprimer les lignes et simuler ensuite la numérotation de lignes d’origine avec #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.

La directive #line hidden masque les lignes successives du débogueur, de sorte que quand le développeur parcourt le code, les lignes situées entre une directive #line hidden et la directive #line suivante (en supposant qu’il ne s’agit pas d’une autre directive #line hidden) sont ignorées.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. Cette option peut aussi être utilisée pour permettre à ASP.NET de différencier le code défini par l’utilisateur du code généré par l’ordinateur.This option can also be used to allow ASP.NET to differentiate between user-defined and machine-generated code. Même si ASP.NET est le principal utilisateur de cette fonctionnalité, il est probable que d’autres générateurs de code source pourront l’utiliser.Although ASP.NET is the primary consumer of this feature, it is likely that more source generators will make use of it.

Une directive #line hidden n’affecte ni les noms de fichiers ni les numéros de lignes dans les rapports d’erreurs.A #line hidden directive does not affect file names or line numbers in error reporting. Autrement dit, si une erreur se produit dans un bloc masqué, le compilateur indique le nom du fichier et le numéro de ligne actuels de l’erreur.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.

La directive #line filename spécifie le nom de fichier que vous souhaitez voir apparaître dans la sortie du compilateur.The #line filename directive specifies the file name you want to appear in the compiler output. Par défaut, le nom réel du fichier de code source est utilisé.By default, the actual name of the source code file is used. Le nom de fichier doit être entre guillemets doubles (" ") et doit être précédé d’un numéro de ligne.The file name must be in double quotation marks ("") and must be preceded by a line number.

Un fichier de code source peut contenir un nombre illimité de directives #line.A source code file can have any number of #line directives.

Exemple 1Example 1

L’exemple suivant montre comment le débogueur ignore les lignes masquées dans le code.The following example shows how the debugger ignores the hidden lines in the code. Quand vous exécutez l’exemple, celui-ci affiche trois lignes de texte.When you run the example, it will display three lines of text. Or, quand vous définissez un point d’arrêt, comme dans l’exemple, et que vous appuyez sur F10 pour parcourir le code, vous pouvez remarquer que le débogueur ignore la ligne masquée.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. Vous remarquerez aussi que même si vous définissez un point d’arrêt au niveau de la ligne masquée, le débogueur continuera de l’ignorer.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.");
    }
}

Voir aussiSee also