Dans de rares cas, il peut être utile de modifier la ligne qui est donnée par __LINE__
à quelque chose d'autre. J'ai vu GNU configure faire cela pour certains tests afin de rapporter les numéros de ligne appropriés après avoir inséré quelques voodoo entre des lignes qui n'apparaissent pas dans les fichiers sources originaux. Par exemple :
#line 100
Les lignes suivantes commenceront par __LINE__
100. Vous pouvez éventuellement ajouter un nouveau nom de fichier
#line 100 "file.c"
Il n'est que rarement utile. Mais si c'est nécessaire, il n'y a pas d'alternative à ma connaissance. En fait, au lieu de la ligne, on peut aussi utiliser une macro qui doit aboutir à l'une des deux formes ci-dessus. En utilisant la bibliothèque du préprocesseur boost, vous pouvez incrémenter la ligne courante de 50 :
#line BOOST_PP_ADD(__LINE__, 50)
J'ai pensé qu'il était utile de le mentionner puisque vous avez demandé l'utilisation de __LINE__
y __FILE__
. On n'a jamais assez de surprises avec le C++ :)
Edit : @Jonathan Leffler fournit quelques autres bons cas d'utilisation dans les commentaires :
L'utilisation de #line est très utile pour les pré-processeurs qui veulent garder les erreurs signalées dans le code C de l'utilisateur en ligne avec le fichier source de l'utilisateur. C'est ce que font les préprocesseurs Yacc, Lex et (plus chez moi) ESQL/C.
0 votes
LIGNE devrait faire ce qu'il faut. Je l'ai largement utilisé, ainsi que ses cohortes, notamment pour JOLIE_FONCTION . ... Mais ... eh bien, je suis juste en train de regarder un code où LIGNE mensonges. Probablement parce qu'il se trouve dans un bloc catch pour la gestion des exceptions try/catch.
4 votes
Pertinent : référence gcc pour les macros prédéfinies