#line, directive (C/C++)

La directive #line indique au préprocesseur de définir les valeurs signalées du compilateur pour le numéro de ligne et le nom de fichier sur un numéro de ligne et un nom de fichier donnés.

Syntaxe

#linedigit-sequence ["filename"]

Notes

Le compilateur utilise le numéro de ligne et le nom de fichier facultatif pour faire référence aux erreurs qu’il trouve pendant la compilation. Le numéro de ligne fait généralement référence à la ligne d’entrée actuelle, et le nom de fichier fait référence au fichier d’entrée actuel. Le numéro de ligne est incrémenté une fois chaque ligne traitée.

La valeur de séquence numérique peut être n’importe quelle constante entière comprise entre 0 et 2147483647, inclusive. Le remplacement des macros peut être utilisé sur les jetons de prétraitement, mais le résultat doit être évalué à la syntaxe correcte. Le nom de fichier peut être n’importe quelle combinaison de caractères et doit être placé entre guillemets doubles (" "). Si le nom de fichier est omis, le nom de fichier précédent reste inchangé.

Vous pouvez modifier le numéro de ligne source et le nom de fichier en écrivant une #line directive. La #line directive définit la valeur de la ligne qui suit immédiatement la directive dans le fichier source. Le traducteur utilise le numéro de ligne et le nom de fichier pour déterminer les valeurs des macros prédéfinies __FILE__ et __LINE__. Vous pouvez utiliser ces macros pour insérer des messages d’erreur auto-descriptifs dans le texte du programme. Pour plus d’informations sur ces macros prédéfinies, consultez Macros prédéfinies.

La __FILE__ macro s’étend sur une chaîne dont le contenu est le nom de fichier, entouré de guillemets doubles (" ").

Si vous modifiez le numéro de ligne et le nom de fichier, le compilateur ignore les valeurs précédentes et continue de traiter les nouvelles valeurs. La directive #line est généralement utilisée par les générateurs de programmes. Il est utilisé pour provoquer des messages d’erreur pour faire référence au fichier source d’origine, au lieu du programme généré.

Exemple

Les exemples suivants illustrent #line et les __FILE____LINE__ macros.

Dans le premier exemple, le numéro de ligne est défini sur 10, puis sur 20, et le nom de fichier est remplacé par hello.cpp.

// line_directive.cpp
// Compile by using: cl /W4 /EHsc line_directive.cpp
#include <stdio.h>

int main()
{
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 10
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
#line 20 "hello.cpp"
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
    printf( "This code is on line %d, in file %s\n", __LINE__, __FILE__ );
}
This code is on line 7, in file line_directive.cpp
This code is on line 10, in file line_directive.cpp
This code is on line 20, in file hello.cpp
This code is on line 21, in file hello.cpp

Dans cet exemple, la macro ASSERT utilise les macros prédéfinies __LINE__ et __FILE__ pour imprimer un message d’erreur sur le fichier source si une assertion donnée n’est pas vraie.

#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}

Voir aussi

Directives de préprocesseur