In rari casi può essere utile modificare la linea fornita da __LINE__
a qualcos'altro. Ho visto GNU configure che per alcuni test riportava numeri di linea appropriati dopo aver inserito del voodoo tra le righe che non compaiono nei file di origine originali. Per esempio:
#line 100
farà le seguenti righe cominciano con __LINE__
100. È possibile opzionalmente aggiungere un nuovo file-name
#line 100 "file.c"
E 'solo raramente utile. Ma se è necessario, non ci sono alternative che io conosca. In realtà, al posto della linea, può essere utilizzata anche una macro che deve risultare in una qualsiasi delle due forme precedenti. Utilizzando la libreria Boost preprocessore, è possibile incrementare la riga corrente del 50:
#line BOOST_PP_ADD(__LINE__, 50)
ho pensato che sia utile ricordare che, dal momento che hai chiesto di utilizzo di __LINE__
e __FILE__
. Uno non ottiene abbastanza sorprese su C++ :)
Edit: @ Jonathan Leffler fornisce alcuni più buoni casi d'uso nei commenti:
scherzi con #line è molto utile per i pre-processori che desidera mantenere gli errori segnalati nel codice C dell'utente in linea con il file sorgente dell'utente. Lo fanno Yacc, Lex e (più a casa mia) i preprocessori ESQL/C.
fonte
2009-02-27 23:59:48
__LINE__ dovrebbe fare la cosa giusta. L'ho usato e le sue coorti in modo esteso, tra cui __PRETTY_FUNCTION__. ... Ma ... beh, sto proprio ora guardando il codice in cui __LINE__ mente. Probabilmente perché si trova in un blocco catch per la gestione delle eccezioni try/catch. –
rilevante: [riferimento gcc per macro predefinite] (http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html) –