43 votes

Macro / mot-clé qui peut être utilisé pour imprimer le nom de la méthode ?

__FILE__ y __LINE__ sont bien connus. Il existe un __func__ depuis C99.

#include <iostream>
struct Foo {
        void Do(){ std::cout << __func__ << std::endl; }
};

int main()
{
        std::cout << __func__ << std::endl;
        Foo foo; foo.Do();
        return 0;
}

produira

main
Do

Existe-t-il une macro ou un mot-clé permettant d'afficher le nom de la méthode comme suit Foo::Do ?

80voto

Kornel Kisielewicz Points 26556

Boost dispose d'une macro utilitaire spéciale appelée FONCTION "BOOST_CURRENT qui cache les différences entre les implémentations du compilateur.

En suivant son implémentation, nous voyons qu'il y a plusieurs macros qui dépendent du compilateur :

  • __PRETTY_FUNCTION__ -- GCC, MetroWerks, Digital Mars, ICC, MinGW
  • __FUNCSIG__ -- MSVC
  • __FUNCTION__ -- Intel et IBM
  • __FUNC__ -- Borland
  • __func__ -- ANSI C99

8voto

rpg Points 5305
  • Sous GCC, vous pouvez utiliser __FUNCTION__ et __PRETTY_FUNCTION__ .
  • Sous MSVC, vous pouvez utiliser __FUNCSIG__ y __FUNCTION__ .

3voto

David Thornley Points 39051

Une telle macro n'existe pas dans le C++ standard, y compris dans le projet de norme C++0x que j'ai examiné. Cela compliquerait la compilation, puisque l'analyse syntaxique (nécessaire pour déterminer ce qu'est une fonction) vient après le prétraitement, et je soupçonne que c'est la raison pour laquelle il n'y a rien dans la norme.

El __func__ que vous utilisez est non standard, bien qu'elle fonctionne apparemment avec votre compilateur.

1voto

Ruddy Points 1467

Voir " Macros prédéfinies (C/C++) "pour obtenir la liste complète des produits pris en charge par MS Visual Studio.

1voto

Pas dans le C++ standard (et __func__ ne fait pas partie du C++). Votre implémentation peut cependant avoir une telle fonctionnalité - quel compilateur utilisez-vous ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X