C ++, récupère le nom de la fonction
En C++, il est un moyen d'obtenir la signature de la fonction/nom de pointeur comme ça?
void test(float data) {}
cout << typeid(&test).name();
Je veux utiliser ces données pour l'enregistrement.
source d'informationauteur Ockonal | 2010-06-20
Vous devez vous connecter pour publier un commentaire.
Si vous voulez juste du journal l'actuel nom de la fonction, la plupart des compilateurs ont
__FUNCTION__
macro, ce qui vous donnera l'actuel nom de la fonction au moment de la compilation.Vous pouvez aussi chercher les pile de la marche des techniques (ici est un exemple pour Windows), qui peut vous fournir plus d'informations sur la pile d'appel en cours et les noms de fonction au moment de l'exécution.
C++, obtenir le nom de la fonction d'appel par l'intermédiaire d'un pointeur:
Option 1: faire votre propre nom de fonction enregistreur
Si vous souhaitez résoudre un "pointeur vers une fonction" à un "nom de fonction", vous devrez créer votre propre table de recherche de toutes les fonctions disponibles, pour ensuite comparer votre adresse de pointeur de la clé dans la table de recherche, et de retourner le nom.
Une application décrite ici: https://stackoverflow.com/a/8752173/445131
Option 2: Utilisation De
__func__
GCC fournit cette magie de la variable qui contient le nom de la fonction en cours, comme une chaîne de caractères. Il fait partie du standard C99:
De sortie:
Notes:
__FUNCTION__
est un autre nom pour__func__
. Les anciennes versions de GCC ne reconnaissent que ce nom. Cependant, elle n'est pas normalisée. Si une portabilité maximale est requise, nous vous recommandons d'utiliser__func__
mais de fournir une définition de secours avec le préprocesseur, de le définir, si elle n'est pas définie:Source: http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html
Il n'y a aucun moyen que vous pouvez obtenir le nom de la fonction. Juste parce qu'il ne réside pas à l'intérieur de l'exécutable. Il disparaît complètement après votre code est compilé & liés.
Vous pouvez essayer de modifier le nom de vos fonctions/variables, et votre exécutable sera le même (à part mutable choses le compilateur peut mettre, comme la construction de date/heure, les informations de débogage ID, etc.)
Également essayer d'ouvrir le fichier exécutable avec certains de l'éditeur et de chercher le nom de la fonction. Plus vous aurez de chance de ne pas le trouver.
Cependant, vous pouvez mettre quelques programmatiques "décorations" qui va vous aider à découvrir votre nom de fonction lors de l'exécution.
Vous ne pouvez pas obtenir le nom de la fonction en C++, mais vous pouvez imprimer le pointeur et consulter le binaire (si ce n'est dépouillé) pour le nom de la fonction. La signature peut être imprimée exactement comme vous le faites, c'est juste que le nom du type n'est pas vraiment "l'homme lisibles". Consultez votre documentation du compilateur pour que la sortie de votre code. Dans g++, la sortie sera
PFvfE
dont je ne comprends pas complètement, mais identifie un pointeur (P
) à une fonction (F
) de retour void (v
) et en prenant un flotteur (f
) comme unique argument. Ne me demandez pas ce que leE
est...(Je n'ai pas le temps de vérifier les docs maintenant, j'ai juste joué avec un exemple de programme de deviner que: imprimez les différentes signatures de fonction)
Je ne suis pas sûr à 100%, mais cela me semble à la réflexion (Java), et le C++ ne prend pas en charge ce genre de choses. Peut-être que je ne sais pas,mais je nai pas vu ce pour C++ encore.