Quando utilizzo la macro/variabile __FUNCTION__
per stampare le informazioni di debug, sembra esserci una differenza in ciò che viene emesso quando si utilizza il compilatore e il ccc Microsoft C++. Ad esempio, utilizzando il seguente codice banale:Come si imita la versione Microsoft di __FUNCTION__ utilizzando gcc?
class Foo
{
public:
void Bar(int a, int b, int c)
{
printf ("__FUNCTION__ = %s\n", __FUNCTION__);
}
};
int main (void)
{
Foo MyFoo;
MyFoo.Bar();
return 0;
}
Utilizzando Visual C++ Microsoft, ottengo
__FUNCTION__ = Foo::Bar
mentre quando la compilazione utilizzando gcc (in questo caso su Mac), ottengo
__FUNCTION__ = Bar
Il secondo esempio non è l'ideale, perché molto spesso hanno diverse classi con, diciamo, Init()
e Uninit()
metodi e in un output di debug rintracciare la sua virtua impossibile dire quale di questi è stato chiamato poiché il nome della classe mancherà. Ora, so che è possibile utilizzare il __PRETTY_FUNCTION__
al posto di __FUNCTION__
per ottenere qualcosa di simile
__PRETTY_FUNCTION__ = void Foo::Bar(int, int, int)
che va bene, ma è un po 'troppo prolisso per quello che mi serve e diventa un po' lungo per le funzioni con un sacco di parametri .
Quindi la mia domanda è (finalmente), c'è un modo per ottenere il risultato a guardare come semplicemente Foo::Bar
usando gcc, come nell'esempio di cui sopra?
Sono curioso come ho mai avuto bisogno di questa macro, perché avete bisogno di esso? Il tuo compilatore/test suite/controllo della memoria non ti dice la riga esatta di codice in cui si verifica il problema? - Se è per la registrazione, suggerisco di scrivere registri che saranno identici, indipendentemente dal compilatore utilizzato - per poi scrivere gli strumenti di corrispondenza dei modelli per analizzare i registri. – Tom
possibile duplicato di [Qual è la differenza tra __PRETTY_FUNCTION__, __FUNCTION__, __func__?] (http://stackoverflow.com/questions/4384765/whats-the-difference-between-pretty-function-function-func) –
Non è un duplicato - questa domanda non ha nulla da dire su come ottenere uno stile Microsoft stringa fuori da GCC. –