Dans de rares cas, il peut être utile de changer la ligne donnée par __LINE__
à autre chose. 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é du vaudou entre les lignes qui n'apparaissent pas dans les fichiers sources d'origine. Par exemple:
#line 100
Apportera les lignes suivantes commencent par __LINE__
100. Vous pouvez aussi ajouter un nouveau nom de fichier
#line 100 "file.c"
Il est rarement utile. Mais si cela est nécessaire, il n'y a pas d'alternatives que je connaisse. En fait, au lieu de la ligne, une macro peut également être utilisée, ce qui doit aboutir à l'une des deux formes ci-dessus. Utilisation de la bibliothèque de préprocesseur boost, vous pouvez augmenter la ligne actuelle de 50:
#line BOOST_PP_ADD(__LINE__, 50)
je pensais qu'il est utile de le mentionner, puisque vous avez demandé sur l'utilisation de __LINE__
et __FILE__
. On n'a jamais assez de surprises obtient sur :) C++
Edit: Leffler fournit quelques @ Jonathan plus bon cas d'utilisation dans les commentaires:
Messing aveC#line est très utile pour les pré-processeurs souhaitez conserver les erreurs signalées dans le code C de l'utilisateur en ligne avec le fichier source de l'utilisateur. Yacc, Lex, et (plus à la maison pour moi) les préprocesseurs ESQL/C font cela.
__LINE__ devrait faire la bonne chose. Je l'ai beaucoup utilisé et ses cohortes, y compris __PRETTY_FUNCTION__. ... Mais ... eh bien, je suis juste en train de regarder le code où __LINE__ ment. Probablement parce qu'il se trouve dans un bloc catch pour la gestion des exceptions try/catch. –
pertinent: [référence gcc pour les macros prédéfinies] (http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html) –