#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
#line
digit-Sequence ["nom_fichier"]
Remarques
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 en cours et le nom de fichier fait référence au fichier d’entrée en cours. Le numéro de ligne est incrémenté après le traitement de chaque ligne.
La valeur de la séquence numérique peut être toute constante entière comprise entre 0 et 2147483647 inclus. Le remplacement de macro peut être utilisé sur les jetons de prétraitement, mais le résultat doit correspondre à la syntaxe correcte. Le nom de fichier peut être n’importe quelle combinaison de caractères et doit être placé entre guillemets doubles ( " "
). Si filename 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 __FILE__
prédéfinies 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 se développe en une chaîne dont le contenu est le nom de fichier, entouré par des 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 le traitement avec les nouvelles valeurs. La directive #line est généralement utilisée par les générateurs de programmes. Elle est utilisée pour faire en sorte que les messages d’erreur fassent référence au fichier source d’origine, et non au programme généré.
Exemple
Les exemples suivants illustrent #line
les __LINE__
__FILE__
macros et.
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 __LINE__
prédéfinies et __FILE__
affiche un message d’erreur relatif au fichier source si une assertion donnée n’est pas vérifiée.
#define ASSERT(cond) if( !(cond) )\
{printf( "assertion error line %d, file(%s)\n", \
__LINE__, __FILE__ );}